Categories
Editorial

The U.S. needs more green card holders and immigrants to stay ahead

Graphic: “Immigrants: We get the job done.”

“To sustain the United States’ technology leadership in the face of China’s formidable economic and military challenge,” write Graham Allison, a professor of government at the Harvard Kennedy School and Eric Schmidt, former CEO and executive chairman of Google in Foreign Policy, “U.S. President Joe Biden should launch an urgent drive to recruit and retain 1 million tech superstars from around the world by the end of his first term in office.”

For the want of a green card (or: How the 5G story could’ve been very different)

Graphic: 5G phone network.

Their article, The U.S. Needs a Million Talents Program to Retain Technology Leadership, starts with a story about one key player we lost in our failure to take in new people.

In 2009, Erdal Arikan, a Turkish graduate of the California Institute of Technology and MIT published a paper that solved a big information theory problem. He could’ve continued his work in the U.S., but he had to leave because he couldn’t get an academic appointment or sponsorship to stay. He returned to Turkey, turned to China, and Huawei — yes, that Huawei — used his work to create 5G solutions.

The article sums us the situation like so:

And while Huawei has produced one-third of the 5G infrastructure now operating around the world, the United States does not have a single major company competing in this race. Had the United States been able to retain Arikan—simply by allowing him to stay in the country instead of making his visa contingent on immediately finding a sponsor for his work—this history might well have been different.

And with the recent discovery that Huawei equipment installed as part of U.S. communications infrastructure could have a secondary purpose disrupting nuclear arsenal communications, the magnitude of our failure to let Arikan stay in the country has become even more apparent.

It’s the space race all over again

Photo: Time Magazine cover — “Race for the Moon,” featuring an American and Russian astronaut in spacesuits running towards the moon.

China’s leader Xi Jinping said it himself: “technological innovation has become the main battleground of the global playing field, and competition for tech dominance will grow unprecedentedly fierce.”

In 2001, China was still behind technologically. But in the space of only a couple of decades, they’ve leapfrogged the West in communications, facial and voice recognition, other aspects of AI, and green technology, and their education system is producing four times the STEM bachelor’s degrees and twice as many graduate degrees.

Their insularity remains their Achilles’ heel. They naturalize fewer than 100 citizens a year, while the U.S. does so with 1 million a year. That’s a difference of four orders of magnitude.

And what a difference it makes! Half of all U.S. unicorns were founded or co-founded by immigrants, and there are so many big-ass, big-deal companies founded or run by people born outside the U.S.:

Big-ass companyFounder or leaderWhere they were born
Auth0Eugenio Pace, founderArgentina
CloudflareMichelle Zatlyn, founderCanada
Credit KarmaKenneth Lin, founderChina
CrowdstrikeDmitri Alperovitch, founderRussia
DatabricksAli Ghodsi, founderIran
DiscordStanislav Vishnevsky, founderUkraine
EventbriteRenaud Visage, founderFrance
EvernoteStepan Pachikov, founderAzerbaijan
GoogleSergei Brin, founderRussia
GoogleSundar Pinchai, CEOIndia
InstacartApoorva Mehta, founderIndia
InstacartFidji Simo, CEOFrance
MicrosoftSatya Nadella, CEOIndia
NvidiaJensen Huang, founderTaiwan
PalantirPeter Thiel, founderGermany
PelotonYony FengChina
RobinhoodVlad Tenev, founderBulgaria
SlackStewart Butterfield, cofounderCanada
SpaceX, TeslaElon Musk, CEOSouth Africa
SprinklrRagy Thomas, founderIndia
StripePatrick and John Collison, foundersIreland
UberGarrett Camp, founderCanada
Warby ParkerDavid GilboaSweden
ZoomEric YuanChina
ZscalerJay CaudhryIndia

I deliberately included German-born Peter Thiel in the list particularly because he spends a lot of time canoodling with the anti-immigrant crowd. He’s one of those people who says “Ever since my family came to this country, we’ve had nothing but trouble from the immigrants.”

Let’s also not forget that Apple founder Steve Jobs was the son of a Syrian immigrant, and that there are many children of immigrants who’ve contributed so much.

“It’s time for the United States to poach with purpose.”

Photo: Smartphone displaying picture of “help wanted” sign.

That’s what Allison and Schmidt write, and what they mean is that the U.S. should:

  • Grant an additional quarter million green cards every year.
  • Eliminate the rule that limits the percentage of green cards issued to citizens of any single country to 7%.
  • Move the immigration system from its current paper forms-based process to a digital one, which has caused more than 300,000 green cards to be lost.
  • Grant 100,000 additional visas to extraordinary tech talents. You know, like the one Melania Trump got, but give them to people who actually merit them.
  • Adjust the criteria for visas so that people qualify based on their technological expertise.
  • Direct the Labor Department to make recruiting STEM talent a top priority.

…and most importantly:

  • Dismantle the Trump administration rules whose goal was to reduce legal immigration to the U.S.

There’s more in the article, and I strongly encourage you to read it.

And hey, if you’re in Tampa Bay and looking for an example of a highly-skilled green card holder who’s making a difference, let me point you to the handsome well-dressed gentleman in the photo below:

Joey deVilla eats a burger -- that most American of dishes -- after successfully acquiring a green card.
Celebrating my green card status the American way at Burger 21, on January 26, 2017.

Don’t let my accent, grasp of the culture, or accordion skill fool you — I’m a first-generation green card holder from the Philippines, and I’m here to make a difference in the tech world, locally and nationally.

(If you’re really curious, check out my article about my green card interview, which took place a week after the Trump inauguration.)

Categories
Current Events Florida Programming Tampa Bay

My best hackathon advice for StartupBus 2022

First the advice, then the backstory

Graphic: Get to the point

Unlike those recipe sites where you have to scroll past lots of backstory and unrelated personal trivia before you get to the actual recipe, I’m going to give you the advice first.

It’s just this: in a hackathon, simple and working beats complex and non-functional.

The demo you build should be all about showing your main idea in action. The user should be able to go to your site or launch the application, use it to perform the intended task or achieve the intended result, and there should be a clear sign that the user succeeded at the end. That’s it. Anything else is gold-plating, and you don’t have time for that in a hackathon, whether you’re allotted an afternoon or, as in the case of StartupBus, three days. On a bus. With lots of interruptions.

Once again, I repeat my best hackathon advice: simple and working beats complex and non-functional.

Want to join StartupBus Florida?

It’s not too late to register to register for StartupBus Florida, which departs Tampa on the morning of Wednesday, July 27 and arrives in Austin, Texas on Friday, July 29 with surprises aplenty in between.

While on the road for three days, you’ll build a startup and its supporting application. Then on Saturday, July 30 and Sunday, July 31 in Austin, you’ll present your startup and application to judges in the semifinals (Saturday) and finals (Sunday).

Need more details? Email me to find out more!

Want to register? Go to StartupBus.com’s Apply page, select Florida, and use the invite code JOEY22.

And now, the backstory…

Here’s a story from a hackathon where I applied this principle and impressed the judges enough for them to make up a new prize category on the spot.

In 2017, GM (yes, the auto manufacturer) held “Makers Hustle Harder” hackathons in a handful of cities to see what people could build on their Next Generation Infotainment (NGI) SDK for in-car console systems.

They held one of these hackathons in Tampa at Tampa Hackerspace. and I offered to help Chris Woodard work on his app idea. I did that for most of the day, and with a couple of hours left, I came up with a goofy idea that I could whip up in very little time.

A little technical background

The NGI SDK made it possible for developers to write apps for the in-car infotainment consoles located in many GM vehicle center dashboards, like the one pictured above. The SDK gives you access to:

  • An 800-pixel high by 390-pixel wide touchscreen to receive input from and display information to the user
  • The voice system to respond to user commands and provide spoken responses to the user
  • Data from nearly 400 sensors ranging from the state of controls (buttons and the big dial) to instrumentation (such as speed, trip odometer, orientation) to car status information (Are there passengers in the car? Are the windows open or closed?) and more.
  • The navigation system to get and set navigation directions
  • The media system to play or stream audio files
  • The file system to create, edit, and delete files on the system
  • An inter-app communication system so that apps can send messages to each other

With the SDK, developers could build and test apps for GM cars on your their own computers. It came with an emulator that lets you see your apps as they would appear on the car’s display, simulate sensor readings, and debug your app with a specialized console.

The hackathon

I arrived at Tampa Hackerspace that morning, and it was already abuzz with activity:

Outside in the parking lot were 3 NGI-equipped GM vehicles provided by Crown, a local auto dealer. Two of them were Buick Lacrosse sedans…

…and one was a GM Sierra truck:

The NGI team were there to answer our questions and help us install our apps onto the in-car console to give them some non-emulator, on-the-real-thing testing.

I performed a “smoke test” on my test app, Shotgun (an app that takes a list of names and randomly decides which one gets to “ride shotgun”) early in the morning on the Sierra’s console…

…and I have to say that there’s nothing like the feeling when your code runs for the first time on a completely new-to-you platform.

My main reason for being there was to help out Chris Woodard (whom I knew from his Cocoa / iOS programming Meetup group) on WeatherEye, his app that provides live weather reports for your planned route as you drove. When we completed it early in the afternoon, I ran a smoke test on it, and it worked as well.

With a couple of hours of “hacking time” left, I came up with a silly idea and coded it up: a timer for the game classically known as the “Chinese Fire Drill”. Here’s how it worked:

  • Four people get in the car, close the doors, and someone starts the app. They’ll see this screen:
  • When everyone’s ready, someone in the front presses the start button.
  • If any of the doors are open when the start button is pressed, the players will be told to close all the doors first:
  • If all the doors are closed when the start button is pressed, the game begins. The screen looks like this:
  • Players exit the car, run around it once, return to their original seat, and close their doors.
  • The game ends when all four doors are closed, at which point the time it took them to complete the drill is displayed:

(If you’d like to see the code, I’ve put it in a repo on my GitHub account.)

The app wasn’t pretty, but that’s not what hackathons are about — they’re about getting your idea to work in the time allotted. Remember: simple and working beats complex and non-functional.

I found an available test vehicle, three other people to playtest the game with me, and two camera operators to record video of a test runs. We played the game twice, and we were giggling all the time. Fitness Fire Drill (I decided to not call it Chinese Fire Drill, as the term comes from an era when “Chinese” was used as a pejorative adjective to mean sloppy, sub-par, or amateurish) was a success!

Everyone who built a project presented it at the end of the day to the panel of judges, and the organizers saved Fitness Fire Drill for the very end — it got a lot of laughs.

In the end…

My wife Anitra was flying out early the following morning on business, so rather than stay for the hackathon dinner and judges’ results, I high-tailed it home to have dinner with her. Before going to bed, I noticed that Chris had sent me an email telling me that Fitness Fire Drill won the “Judges’ Fetish” prize (a category they’d made up just for my submission), something I wasn’t expecting!

From that outcome, I learned what I now call the First Rule of Hackathons: simple and working beats complex and non-functional.

Categories
Career Programming

How to solve coding interview questions: Linked lists, part 2

In case you missed part 1…

Before you continue reading, be sure to check out part 1! It’s where I explain what a linked list is, and provide a couple of basic classes that we’ll build on in this article.

A quick recap

A linked list is a data structure that holds data as a list of items in a specific order. Each item in the list is represented by a node, which “knows” two things:

  • Its data
  • Where the next node is

Here’s a picture of a node’s structure:

A node in a linked list.
Tap to view at full size.

Linked lists are created by connecting nodes together, as shown in the diagram below for a list containing the characters a, b, c, and d in that order:

A linked list of nodes.
Tap to view at full size.

The diagram above features the following:

  • Four nodes, each one for a letter in the list.
  • A variable called head, which is a pointer or reference to the first item in the list. It’s the entry point to the list, and it’s a necessary part of the list — you can’t access a linked list if you can’t access its head.
  • An optional variable called tail, which is a pointer or reference to the last item in the list. It’s not absolutely necessary, but it’s convenient if you use the list like a queue, where the last element in the list is also the last item that was added to the list.

The JavaScript version of the previous article’s code

In the previous article, I provided code for the Node and LinkedList classes in Python. As promised, here are those classes implemented in JavaScript.

// JavaScript

class Node {
    
    constructor(data) {
        this.data = data
        this.next = null
    }
    
    toString() {
        return this.data.toString()
    }
    
}


class LinkedList {
    
    constructor() {
        this.head = null
    }
    
    toString() {
        let output = ""
        let currentNode = this.head

        while (currentNode) {
            output += `${currentNode.data.toString()}\n`
            currentNode = currentNode.next
        }
        
    toString() {
        if (!this.head) {
            return('Empty list.')
        }
        
        let output = ""
        let currentNode = this.head

        while (currentNode) {
            output += `${currentNode.data.toString()}\n`
            currentNode = currentNode.next
        }
        
        return output.trim()
    }
    
    addLast(data) {
        let newNode = new Node(data)
        
        // If the list is empty,
        // point `head` to the newly-added node
        // and exit.
        if (this.head === null) {
            this.head = newNode
            return
        }
        
        // If the list isn’t empty,
        // traverse the list by going to each node’s
        // `next` node until there isn’t a `next` node...
        let currentNode = this.head
        while (currentNode.next) {
            currentNode = currentNode.next
        }
        
        // If you’re here, `currentNode` is
        // the last node in the list.
        // Point `currentNode` at
        // the newly-added node.
        currentNode.next = newNode
    }

}

…where each item in a list is represented by the node. A node knows only about the data it contains and where the next node in the list is.

The JavaScript version of Node and LinkedList uses the same algorithms as the Python version. The Python version follows the snake_case naming convention, while the JavaScript version follows the camelCase convention.

The JavaScript LinkedList class has the following members:

  • head: A property containing a pointer or reference to the first item in the list, or null if the list is empty. This property has the same name in the Python version.
  • constructor(): The class constructor, which initializes head to null, meaning that any newly created LinkedList instance is an empty list. In the Python version, the __init__() method has this role.
  • toString(): Returns a string representation of the contents of the linked list for debugging purposes. If the list contains at least one item, it returns the contents of the list. If the list is empty, it returns the string Empty list. In the Python version, the __str__() method has this role.
  • addLast(): Given a value, it creates a new Node containing that value and adds that Node to the end of the list. In the Python version, the add_last() method has this role.

Adding more functionality to the list

In this article, we’re going to add some much-needed additional functionality to the LinkedList class, namely:

  • Reporting how many elements are in the list
  • Getting the value of the nth item in the list
  • Setting the value of the nth item in the list

I’ll provide both Python and JavaScript implementations.

How many elements are in the list?

To find out how many elements are in a linked list, you have to start at its head and “step through” every item in the list by following each node’s next property, keeping a count of each node you visit. When you reach the last node — the one whose next property is set to None in Python or null in JavaScript — report the number of nodes you counted.

The Python version uses one of its built-in “dunder” (Pythonese for double-underscore) methods, __len__(), to report the number of items in the list. Defining __len__() for LinkedList means that any LinkedList instance will report the number of items it contains when passed as an argument to the built-in len() function. For example, if a LinkedList instance named my_list contains 5 items, len(my_list) returns the value 5.

Here’s the Python version, which you should add to the Python version of LinkedList:

# Python

def __len__(self):
    count = 0
    current_node = self.head
    
    # Traverse the list, keeping count of 
    # the nodes that you visit,
    # until you’ve gone past the last node.
    while current_node:
        current_node = current_node.next
        count += 1
        
    return count    

The JavaScript version is getCount(). If a LinkedList instance named myList contains 5 items, len(myList) returns the value 5.

Here’s the JavaScript version, which you should add to the JavaScript version of LinkedList:

// JavaScript

getCount() {
    let count = 0
    let currentNode = this.head
    
    // Traverse the list, keeping count of 
    // the nodes that you visit,
    // until you’ve gone past the last node.
    while (currentNode) {
        currentNode = currentNode.next
        count++
    }
    
    return count
}

How do I get the data at the nth node in the list?

To get the data at the nth node of the list, you can use an approach that’s similar to the one for counting the list’s elements. You have to start at the head and “step through” every item in the list by following each node’s next property, keeping a count of each node you visit and comparing it against n, where n is the index of the node whose data you want. When the count of nodes you’ve visited is equal to n, report the data contained within the current node.

Here’s the Python version, get_element_at(), which you should add to the Python version of LinkedList:

# Python

def get_element_at(self, index):
    current_index = 0
    current_node = self.head

    # Traverse the list, keeping count of 
    # the nodes that you visit,
    # until you’ve reached the specified node.        
    while current_node:
        if current_index == index:
            # We’re at the node at the given index!
            return current_node.data
        
        # We’re not there yet...
        current_node = current_node.next
        current_index += 1

    # If you’re here, the given index is larger
    # than the number of elements in the list.
    return None

Here’s the JavaScript version, getElementAt(), which you should add to the JavaScript version of LinkedList:

// JavaScript

getElementAt(index) {
    let currentIndex = 0
    let currentNode = this.head
    
    // Traverse the list, keeping count of 
    // the nodes that you visit,
    // until you’ve reached the specified node.     
    while (currentNode) {
        if (currentIndex === index) {
            // We’re at the node at the given index!
            return currentNode.data
        }
        
        // We’re not there yet...
        currentNode = currentNode.next
        currentIndex++
    }
    
    // If you’re here, the given index is larger
    // than the number of elements in the list.
    return null
}

How do I set the value of the nth node in the list?

To set the data at the nth node of the list, you can use an approach that’s similar to the one for getting the data at the nth node. You have to start at the head and “step through” every item in the list by following each node’s next property, keeping a count of each node you visit and comparing it against n, where n is the index of the node whose data you want. When the count of nodes you’ve visited is equal to n, set the current node’s data property to the new value.

Here’s the Python version, set_element_at(), which you should add to the Python version of LinkedList:

# Python

def set_element_at(self, index, value):
    current_index = 0
    current_node = self.head

    # Traverse the list, keeping count of 
    # the nodes that you visit,
    # until you’ve reached the specified node.  
    while current_node:
        if current_index == index:
            # We’re at the node at the given index!
            current_node.data = value
            return True
        
        # We’re not there yet...
        current_node = current_node.next
        current_index += 1
        
    # If you’re here, the given index is larger
    # than the number of elements in the list.
    return False

Here’s the JavaScript version, setElementAt(), which you should add to the JavaScript version of LinkedList:

// JavaScript

setElementAt(index, value) {
    let currentIndex = 0
    let currentNode = this.head
    
    // Traverse the list, keeping count of 
    // the nodes that you visit,
    // until you’ve reached the specified node.     
    while (currentNode) {
        if (currentIndex === index) {
            // We’re at the node at the given index!
            currentNode.data = value
            return true
        }
        
        // We’re not there yet...
        currentNode = currentNode.next
        currentIndex++
    }
    
    // If you’re here, the given index is larger
    // than the number of elements in the list.
    return false
}

The classes so far

Let’s take a look at the complete Node and LinkedList classes so far, in both Python and JavaScript.

Python

# Python

class Node:
    
    def __init__(self, data):
        self.data = data
        self.next = None
        
    def __str__(self):
        return f"{self.data}"


class LinkedList:
    
    def __init__(self):
        self.head = None
        
    def __str__(self):
        if self.head is None:
            return('Empty list.')
        
        result = ""
        current_node = self.head
        while current_node:
            result += f'{current_node}\n'
            current_node = current_node.next
            
        return result.strip()
    
    def add_last(self, value):
        new_node = Node(value)

        # If the list is empty,
        # point `head` to the newly-added node
        # and exit.
        if self.head is None:
            self.head = new_node
            return
        
        # If the list isn’t empty,
        # traverse the list by going to each node’s
        # `next` node until there isn’t a `next` node...
        current_node = self.head
        while current_node.next:
            current_node = current_node.next
        
        # If you’re here, `current_node` is
        # the last node in the list.
        # Point `current_node` at
        # the newly-added node.
        current_node.next = new_node
        
    def __len__(self):
        count = 0
        current_node = self.head
        
        # Traverse the list, keeping count of 
        # the nodes that you visit,
        # until you’ve gone past the last node.
        while current_node:
            current_node = current_node.next
            count += 1
            
        return count        
        
    def get_element_at(self, index):
        current_index = 0
        current_node = self.head
        
        # Traverse the list, keeping count of 
        # the nodes that you visit,
        # until you’ve reached the specified node.        
        while current_node:
            if current_index == index:
                # We’re at the node at the given index!
                return current_node.data
            
            # We’re not there yet...
            current_node = current_node.next
            current_index += 1
    
        # If you’re here, the given index is larger
        # than the number of elements in the list.
        return None
    
    def set_element_at(self, index, value):
        current_index = 0
        current_node = self.head
        
        # Traverse the list, keeping count of 
        # the nodes that you visit,
        # until you’ve reached the specified node.  
        while current_node:
            if current_index == index:
                # We’re at the node at the given index!
                current_node.data = value
                return True
            
            # We’re not there yet...
            current_node = current_node.next
            current_index += 1
            
        # If you’re here, the given index is larger
        # than the number of elements in the list.
        return False

JavaScript

// JavaScript

class Node {
    
    constructor(data) {
        this.data = data
        this.next = null
    }
    
    toString() {
        return this.data.toString()
    }
    
}


class LinkedList {
    
    constructor() {
        this.head = null
    }
    
    toString() {
        if (!this.head) {
            return('Empty list.')
        }
        
        let output = ""
        let currentNode = this.head

        while (currentNode) {
            output += `${currentNode.data.toString()}\n`
            currentNode = currentNode.next
        }
        
        return output.trim()
    }
    
    addLast(value) {
        let newNode = new Node(value)
        
        // If the list is empty,
        // point `head` to the newly-added node
        // and exit.
        if (this.head === null) {
            this.head = newNode
            return
        }
        
        // If the list isn’t empty,
        // traverse the list by going to each node’s
        // `next` node until there isn’t a `next` node...
        let currentNode = this.head
        while (currentNode.next) {
            currentNode = currentNode.next
        }
        
        // If you’re here, `currentNode` is
        // the last node in the list.
        // Point `currentNode` at
        // the newly-added node.
        currentNode.next = newNode
    }
    
    getCount() {
        let count = 0
        let currentNode = this.head
        
        // Traverse the list, keeping count of 
        // the nodes that you visit,
        // until you’ve gone past the last node.
        while (currentNode) {
            currentNode = currentNode.next
            count++
        }
        
        return count
    }
    
    getElementAt(index) {
        let currentIndex = 0
        let currentNode = this.head
        
        // Traverse the list, keeping count of 
        // the nodes that you visit,
        // until you’ve reached the specified node.     
        while (currentNode) {
            if (currentIndex === index) {
                // We’re at the node at the given index!
                return currentNode.data
            }
            
            // We’re not there yet...
            currentNode = currentNode.next
            currentIndex++
        }
        
        // If you’re here, the given index is larger
        // than the number of elements in the list.
        return null
    }
    
    setElementAt(index, value) {
        let currentIndex = 0
        let currentNode = this.head
        
        // Traverse the list, keeping count of 
        // the nodes that you visit,
        // until you’ve reached the specified node.     
        while (currentNode) {
            if (currentIndex === index) {
                // We’re at the node at the given index!
                currentNode.data = value
                return true
            }
            
            // We’re not there yet...
            currentNode = currentNode.next
            currentIndex++
        }
        
        // If you’re here, the given index is larger
        // than the number of elements in the list.
        return false
    }

}

Wait…this “linked list” thing is beginning to look like a Python or JavaScript array, but not as fully-featured. What’s going on here?

The truth about linked lists

Here’s the truth: there’s a better-than-even chance that you’ll never use them…directly.

If you program in most languages from the 1990s or later (for example, Python was first released in 1991, PHP’s from 1994, Java and JavaScript came out in 1995), you’re working with arrays — or in Python’s case, lists, which are almost the same thing — that you can you can add elements to, remove elements from, perform searches on, and do all sorts of things with.

When you use one of these data types in a modern language…

  • Python lists or a JavaScript arrays
  • Dictionaries, also known as objects in JavaScript, hashes in Ruby, or associative arrays
  • Stacks and queues
  • React components

…there’s a linked list behind the scenes, moving data around by traversing, adding, and deleting nodes. There’s a pretty good chance that you’re indirectly using linked lists in your day-to-day programming; you’re just insulated from the details by layers of abstractions.

So why do they still pose linked list challenges in coding interviews?

History plays a major factor.

In older languages like FORTRAN (1957), Pascal (1970), and C (1972), arrays weren’t dynamic, but fixed in size. If you declared an array with 20 elements, it remained a 20-element array. You couldn’t add or remove elements at run-time.

But Pascal and C supported pointers from the beginning, and pointers make it possible to create dynamic data structures — the kind where you can add or delete elements at run-time. In those early pre-web days, when programming languages’ standard libraries weren’t as rich and complete as today’s, and you often had to “roll your own” dynamic data structures, such as trees, queues, stacks, and…linked lists.

If you majored in computer science in the ’70s, ’80s, and even the ’90s, you were expected to know how to build your own dynamic data structures from scratch, and they most definitely appeared on the exam. These computer science majors ended up in charge at tech companies, and they expected the people they hired to know this stuff as well. Over time, it became tradition, and to this day, you’ll still get the occasional linked list question in a coding interview.

What’s the point in learning about linked lists when we’re mostly insulated from having to work with them directly?

For starters, there’s just plain old pragmatism. As long as they’re still asking linked list questions in coding interviews, it’s a good idea to get comfortable with them and be prepared to answer all manner of questions about algorithms and data structures.

Secondly, it’s a good way to get better at the kind of problem solving that we need in day-to-day programming. Working with linked lists requires us to think about pointers/references, space and time efficiency, tradeoffs, and even writing readable, maintainable code. And of course, there’s always a chance that you might have to implement a linked list yourself, whether because you’re working on an IoT or embedded programming project with a low-level language like C or implementing something lower-level such as the reconciler in React.

Coming up next

  • Adding a new element to the head of a linked list
  • Adding a new element at a specific place in the middle of a linked list
  • Deleting a specified element of a linked list

Previously in this series

Categories
Current Events Meetups Tampa Bay

StartupBus Warm-Up at Green Bench — Tuesday, July 19th!

The Coders, Creatives, and Craft Beer meetup is coming back, starting Tuesday, July 19th at 6:30 p.m. at Green Bench Brewing, where we’ll be throwing a warm-party for StartupBus Florida!

StartupBus is no ordinary hackathon. It doesn’t happen in an afternoon in the comfortable surroundings of a coworking space, cafe, or corporate office. It takes THREE DAYS. On a BUS. With all the regular problems posed by a road trip (such as unreliable power and spotty wifi) as well as additional challenges that the organizers have devised. It’s been described as “Navy SEAL training for techies and entrepreneurs.”

While on the bus, the participants — we call them buspreneurs — form teams, come up with an idea for a startup, and build the business and the software that supports it. At the same time, they’re working on a pitch for that business, and practicing the pitch regularly.

After three days when the bus reaches its destination city — Austin, Texas — the real competition begins. StartupBus Florida’s bus will meet up with the other 4 buses coming from different parts of the U.S. and Mexico, and all the teams will pitch in front of judges in the semifinals. A handful of the best teams will go on to the finals, where they’ll pitch to the finals judges. And one will emerge victorious.

StartupBus Florida traditionally departs from Tampa Bay, and we have a solid track record. We had two teams make it to the finals in 2017 and 2019, and our alumni have gone on to start their own companies, build notable careers, and help grow Tampa’s tech scene. This will be the first StartupBus event since 2019, and we’re excited to be back!

StartupBus Florida doesn’t do what it does alone — it’s backed by our favorite hometown heroes: our sponsors! They are…

  • CoreX Legal, the legal firm built for startups. CoreX know the tech and legal side of all things startup and blockchain.
  • Hillsborough County’s EDi2, where EDi2 is short for “Economic Development Innovation Initiative.” Edi2 provide grant funding and support for events and opportunities that help Hillsborough County’s entrepreneurs become successful.

Join us at the StartupBus Warm-Up! Come meet StartupBus Florida’s buspreneurs (contestants) and conductors (coaches), sponsors, alumni, and fans at Green Bench Brewing in St. Pete.

Questions you might have about the event

Questions you might have about StartupBus:

  • When does StartupBus take place? The event starts with a 3-day bus ride that runs from the morning of Wednesday, July 27 to the early evening on Friday, July 29. The final two events happen in the destination city, with the semifinals on Saturday, July 30 and the finals on Sunday, July 31.
  • Where is the destination city? It’s Austin, Texas.
  • How many people will be on the bus? It varies from year to year, but typically there are 2 to 3 dozen buspreneurs (participants) on the bus, along with 2 – 4 conductors (coaches).
  • How many buses will there be? There will be 4 in total. They’ll depart from Cincinnati, Mexico City, Silicon Valley, and Tampa Bay.
  • I have tech/creative/business skills and want to be a buspreneur. How can I join? Sign up on the StartupBus “Apply” page, select “Florida” and use the code JOEY22.
  • How do I find out more about StartupBus and StartupBus Florida? For starters, there’s the StartupBus site. Tampa Bay’s own tech blog, Global Nerdy, has a number of articles on StartupBus.
Categories
Current Events Florida Tampa Bay

StartupBus Florida needs developers!

Photo: David Castañeda and Justin Linn working on their laptops on StartupBus Florida, July 2019.
David Castañeda and Justin Linn coding our StartupBus 2019 app Hyve,
on StartupBus Florida, July 2019.
Tap to view at full size.

We’re about a week and a half away from Wednesday, July 27th, when four buses — one from here in Tampa Bay, along with buses from Cincinnati, Silicon Valley, and Mexico City — will start a three-day journey to Austin Texas.

During those three days, the buses’ riders will be participating in a hackathon, where they’ll be challenged to:

  • Come up with an idea for a startup business
  • Develop a plan for that startup
  • Work on a pitch for that startup
  • Develop the software for that startup

We’ve got a lot of idea, business, and design people on this year’s StartupBus Florida, but we need more developers.

This is a call to developers in the Tampa Bay area and beyond to join StartupBus Florida. You don’t have to be from Tampa Bay or even Florida to ride StartupBus Florida — you just have to be up for a hackathon, road trip, and personal growth all rolled up together!

You don’t have to be an genius-level coder; you just have to know how to code!

Tracy Ingram, Rina Bane, and David Castañeda coding
our StartupBus 2019 app Hyve on StartupBus Florida, July 2019.
Tap to view at full size.

I’ve participated in and organized plenty of hackathons, and I’ve seen so many people resist participating because they believe that they’re not good enough coders. I think that if you can code, you’re good enough — and more importantly, participating in a hackathon can make you a better coder!

Here’s the thing: in a hackathon, you’re not coding a full-fledged app in its final form. You’re building a prototype application that demonstrates what would be possible if you had the time and resources to build a full-fledged app in its final form. You’re building the thing that makes the difference between a startup idea and a startup reality.

If you’re unsure about joining StartupBus Florida as a coder, ask yourself these questions:

  1. Can I program a basic web, mobile, or desktop application that can respond to user input?
  2. Can I make that application save data to and retrieve data from a database?
  3. Can I make that application make use of an API?
  4. Can I figure out new things by asking questions and Googling?

If you can answer “yes” to questions 1 and 4, as well as answer “yes” to either questions 2 or 3 (or both), you should join StartupBus Florida as a coder!

Can you code a back end in Express, Flask, or Laravel? You should code on StartupBus Florida.

Can you code a front end in React, Next, Vue, Angular, Svelte or any other framework? You should code on StartupBus Florida.

Can you write a mobile app in Swift, Kotlin, Xamarin, Ionic, or React Native? You should code on StartupBus Florida.

“Okay, I’m convinced. When does everything take place?”

  • The bus ride: StartupBus starts with a 3-day bus ride that runs from the morning of Wednesday, July 27 to the early evening on Friday, July 29 when it arrives in Austin, Texas.
  • The pitch competition: The final two events happen in the destination city, with the semifinals on Saturday, July 30 and the finals on Sunday, July 31.
  • Travel back home: You’re responsible for your trip home from Austin. I’m flying back on Monday, August 1.

“How do I sign up?”

Sign up on the StartupBus “Apply” page, select “Florida” and use the code JOEY22.

Categories
Career Programming

How to solve coding interview questions: Linked lists, part 1

Programmer Humor, How, and Coding: Me: I can't wait for my first coding
 interview!
 The interviewer:
 I'm about to end this man's whole career
That’s how it works
Okay, maybe coding interviews aren’t that bad.
But they’re close!

If you’re interviewing for a position that requires you to code, the odds are pretty good that you’ll have to face a coding interview. This series of articles is here to help you gain the necessary knowledge and skills to tackle them!

Over the next couple of articles in this series, I’ll walk you through a classic computer science staple: linked lists. And by the end of these articles, you’ll be able to handle this most clichéd of coding interview problems, satirized in the meme below:

r/ProgrammerHumor - Reverse it right now

You’ve probably seen the ads for AlgoExpert with the woman pictured above, where she asks you if you want a job at Google and if you know how to reverse a linked list.

But before you learn about reversing linked lists — or doing anything else with them — let’s first answer an important question: what are they?

What are linked lists?

A linked list is a data structure that holds data as a list of items in a specific order. Linked lists are simple and flexible, which is why they’re the basis of many of the data structures that you’ll probably use in your day-to-day programming.

Linked list basics

Nodes

The basic component of a linked list is a node, which is diagrammed below:

A node in a linked list.
Tap to view at full size.

In its simplest form, a node is a data structure that holds two pieces of information:

  • data: This holds the actual data of the list item. For example, if the linked list is a to-do list, the data could be a string representing a task, such as “clean the bathroom.”
  • next: A linked list is simply a set of nodes that are linked together. In addition to the data it holds, a node should also know where the next node is, and that’s what its next property is for: it points to the next item in the list. In languages like C and Go, this would be a pointer, while in languages like C#, Java, JavaScript, Kotlin, Python, and Swift, this would be a reference.

Here’s a Python implementation of a node. We’ll use it to implement a linked list:

# Python

class Node:
    
    def __init__(self, data):
        self.data = data
        self.next = None
        
    def __str__(self):
        return f"{self.data}"

With Node defined, you can create a new node containing the data “Hello, world!” with this line of code:

new_node = Node("Hello, world!")

To print the data contained inside a node, call Node’s print() method, which in turn uses the value returned by its __str__() method:

print(new_node)
# Outputs “Hello, world!”

Assembling nodes into a linked list

You create a linked list by connecting nodes together using their next properties. For example, the linked list in the diagram below represents a list of the first four letters of the alphabet: a, b, c, and d, in that order:

A linked list of nodes.
Tap to view at full size.

The diagram above features the following:

  • Four nodes, each one for a letter in the list.
  • A variable called head, which is a pointer or reference to the first item in the list. It’s the entry point to the list, and it’s a necessary part of the list — you can’t access a linked list if you can’t access its head.
  • An optional variable called tail, which is a pointer or reference to the last item in the list. It’s not absolutely necessary, but it’s convenient if you use the list like a queue, where the last element in the list is also the last item that was added to the list.

Let’s build the linked list pictured above by putting some nodes together:

# Python

# Let’s build this linked list:
# a -> b -> c -> d

head = Node("a")
head.next = Node("b")
head.next.next = Node("c")
head.next.next.next = Node("d")

That’s a lot of nexts. Don’t worry; we’ll come up with a better way of adding items to a linked list soon.

Here’s an implementation that creates the same list but doesn’t rely on chaining nexts:

# Python

# Another way to build this linked list:
# a -> b -> c -> d

head = Node("a")

node_b = Node("b")
head.next = node_b

node_c = Node("c")
node_b.next = node_c

node_d = Node("d")
node_c.next = node_d

To see the contents of the list, you traverse it by visiting each node. This is possible because each node points to the next one in the list:

# Python

print(head)
print(head.next)
print(head.next.next)
print(head.next.next.next)
print(head.next.next.next.next)

Here’s the output for the code above:

a
b
c
d
None

Of course, the code above becomes impractical if you don’t know how many items are in the list or as the list grows in size.

Fortunately, the repetition in the code — all those prints and nexts — suggests that we can use a loop to get the same result:

# Python

current = head

while current is not None:
    print(current)
    current = current.next

Here’s the output for the code above:

a
b
c
d

A linked list class

Working only with nodes is a little cumbersome. Let’s put together a linked list class that makes use of the Node class:

# Python

class LinkedList:
    
    def __init__(self):
        self.head = None
        
    def __str__(self):
        if self.head is None:
            return('Empty list.')
        
        result = ""
        current_node = self.head
        while current_node is not None:
            result += f'{current_node}\n'
            current_node = current_node.next
        return result.strip()
    
    def add_last(self, data):
        new_node = Node(data)

        # If the list is empty,
        # point `head` to the newly-added node
        # and exit.
        if self.head is None:
            self.head = new_node
            return
        
        # If the list isn’t empty,
        # traverse the list by going to each node’s
        # `next` node until there isn’t a `next` node...
        current_node = self.head
        while current_node.next:
            current_node = current_node.next
        
        # If you’re here, `current_node` is
        # the last node in the list.
        # Point `current_node` at
        # the newly-added node.
        current_node.next = new_node

This LinkedList class has the following members:

  • head: A property containing a pointer or reference to the first item in the list, or None if the list is empty.
  • __init__(): The class initializer, which initializes head to None, meaning that any newly created LinkedList instance is an empty list.
  • __str__(): Returns a string representation of the contents of the linked list for debugging purposes. If the list contains at least one item, it returns the contents of the list. If the list is empty, it returns the string Empty list.
  • add_last(): Given a value, it creates a new Node containing that value and adds that Node to the end of the list.

With this class defined, building a new list requires considerably less typing…

# Python

list = LinkedList()
list.add_last("a")
list.add_last("b")
list.add_last("c")
list.add_last("d")

…and displaying its contents is reduced to a single function call, print(list), which produces this output:

a
b
c
d

Coming up next:

  • JavaScript implementations
  • Adding an item to the start of a linked list
  • Finding an item in a linked list
  • Will you ever use a linked list, and why do they ask linked list questions in coding interviews?

Previously in this series

Categories
Current Events Tampa Bay

What’s happening in the Tampa Bay tech/entrepreneur/nerd scene (Week of Monday, July 18, 2022)

Here’s the list of tech, entrepreneur, and nerd events for Tampa Bay and surrounding areas for the week of Monday, July 18 through Sunday, July 24, 2022.

Python powered logo

Every week, with the assistance of a couple of Jupyter Notebooks that I put together, I compile this list for the Tampa Bay tech community.

As far as event types go, this list casts a rather wide net. It includes events that would be of interest to techies, nerds, and entrepreneurs. It includes (but isn’t limited to) events that fall under the category of:

  • Programming, DevOps, systems administration, and testing
  • Tech project management / agile processes
  • Video, board, and role-playing games
  • Book, philosophy, and discussion clubs
  • Tech, business, and entrepreneur networking events
  • Toastmasters (because nerds really need to up their presentation game)
  • Sci-fi, fantasy, and other genre fandoms
  • Anything I deem geeky

By “Tampa Bay and surrounding areas”, this list covers events that originate or are aimed at the area within 100 miles of the Port of Tampa. At the very least, that includes the cities of Tampa, St. Petersburg, and Clearwater, but as far north as Ocala, as far south as Fort Myers, and includes Orlando and its surrounding cities.

StartupBus 2022 will depart from Tampa Bay!

If you’re looking for an adventure, a chance to test your startup skills, and an experience that will make your résumé stand out, join me on StartupBus Florida, which departs Tampa Bay on July 27, when it sets course for Austin, Texas!

On this three-day journey, “buspreneurs” will form teams, create a business idea, build a software demo for that idea, and develop pitches for that idea. When they arrive in Austin, they’ll spend two days pitching their startups to a panel of judges.

I was a “buspreneur” on StartupBus Florida in 2019, the last time the event took place, and our team made it to the finals and got the runner-up position. This time, I’m a “conductor” — one of the coaches on the bus — and our team is here to help you rise to the challenge.

Want to find out more?

Want to join the bus? Drop me a line!

This week’s events

Monday, July 18

GroupEvent NameTime
Young Professionals Networking JOIN in and Connect!In person at Fords Garage St Pete11:00 AM
Christian Professionals Network Tampa BayLive Online Connection Meeting- Monday11:30 AM
Entrepreneurs & Business Owners of Sarasota & BradentonVirtual Networking Lunch Monday11:30 AM
Professional Business Networking with RGAnetwork.netVirtual Networking Lunch11:30 AM
Thinkful TampaThinkful Webinar || UX/UI Design: Wireframes and Prototypes12:00 PM – 1:30 PM EDT
Coaching for Everyone: Sarasota-ManateeGSCA July 18th “Virtual” Meeting1:00 PM
SCIPS, a 50+ Tampa Bay Singles ClubEUCHRE, Rummy Q and other Board Games for ENTHUSIASTIC GAME PLAYERS4:00 PM
Thinkful TampaThinkful Webinar || Data Analytics: Tools of the Trade6:00 PM – 7:30 PM EDT
Critical Hit GamesMTG: Commander Night6:00 PM
Beginning Web DevelopmentWeekly Learning Session6:00 PM
Tampa Bay Coalition of ReasonMonthly N. Pinellas TBCor Humanist Social Dinner6:00 PM
Toastmasters, Division DACE Advanced Toastmasters 32744806:00 PM
Tampa Bay TabletoppersMonday Feast & Game Night6:00 PM
Working from Laptop and PhoneDigital Income Set up6:00 PM
BerLagmark – Sarasota AmtgardMonday Night Fighter Practice!6:00 PM
Board Game Meetup: Board Game BoxcarWeekly Game Night! (Lazy Moon Location)6:00 PM
Toastmasters Division GTriple Crown Toastmasters Club 4147 (Virtual)6:30 PM
St. Petersburg Crypto Investors and Miners ClubCryptoProCafe : Club DAO6:30 PM
Tampa 20’s and 30’s Social CrewTrivia at The Pub6:30 PM
Toastmasters District 48North Port Toastmasters Meets Online!!6:30 PM
Toastmasters District 48Cool, Confident & Politically Imperfect Toastmasters6:45 PM
Learn-To-Trade Crypto – Online (As Seen on Orlando Sentinel)Learn-To-Trade Q&A (0NLINE)7:00 PM
Ironhack Tampa – Tech Careers, Learning and NetworkingLearn the Basics of Python Programming from an Industry Expert 📊7:00 PM
Learn-To-Trade Forex – Online (As Seen on Orlando Sentinel)Learn-To-Trade Q&A (ONLINE)7:00 PM
Tampa HackerspaceIntro to the Babylock Embroidery Machine (Members Only)7:00 PM
Coded For Money, Flow and Fame – Tampa GroupHow to Get a Never-Ending Flow of Clients7:00 PM
Orlando StoicsONLINE: “Epicureanism” (Part 3)7:00 PM
Toastmasters Division ELakeland (FL) Toastmasters Club #22627:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!Flesh and Blood at Hammerfall Games and Collectibles7:00 PM
Light Study PRO – A Photography Workshop for Emerging ProsMembers as far back as 2008 can access their photos7:00 PM
Tampa – Sarasota – Venice Trivia & Quiz MeetupTrivia Night – Motorworks Brewing Smartphone Trivia Game Show7:00 PM
Library Book Clubs – OCLSVirtual Event: Hiawassee Book Club7:00 PM
Central Florida AD&D (1st ed.) Grognards GuildWorld of Greyhawk: 1E One-Shots7:30 PM
The Nomadic Entrepreneur Group SarasotaLinkedIn Workshop: Learn How To Create A Passive Second Income On LinkedIn8:00 PM
Tampa Financial Freedom Meetup GroupLearn How To Create A Passive Second Income On LinkedIn8:00 PM
Work From Home -Online Business Opportunities and NetworkingLearn How You Can Create A Crazy Side Income Through LinkedIn8:00 PM
Thinkful TampaThinkful Webinar || UX/UI Design: Creating A Design System9:00 PM – 10:30 PM EDT
Tampa / St Pete Business ConnectionsMonday Virtual Business Introductions11:30 PM

Tuesday, July 19

GroupEvent NameTime
Work From Home -Online Business Opportunities and NetworkingCreate A Successful Print on Demand Business6:00 AM
Tampa Bay Agilev-Lean Coffee7:30 AM
Orlando Scuba DivingUnderwater Photo/Video Seminar8:00 AM
Bootstrappers Breakfast® – Tampa Bay AreaEast Coast Bootstrappers Breakfast®8:30 AM
Tampa Bay Tech Career Advice Forum12 Things You May Be Doing Wrong in Your Job Search10:00 AM
Tampa Cybersecurity Training12 Things you may be doing Wrong in your Job Search10:00 AM
Orlando Melrose MakersIn-Person: Makerspace Open Lab10:30 AM
Florida Startup: Idea to IPOHow to Find Product Market Fit Quickly11:00 AM
Young Professionals Networking JOIN in and Connect!In Person Networking at the Great Catch ~~ Oldsmar All Welcome to connect!11:00 AM
Tampa / St Pete Business ConnectionsOldsmar Professional Business Networking lunch11:00 AM
Pasco County Entrepreneurs & Business Owners All WelcomeProfessional Business Networking Lunch Glory Day’s New Tampa11:30 AM
Network Professionals Inc. of South Pinellas (NPI)NPI Seminole Referral Pros Chapter – Exchange Qualified Business Referrals11:30 AM
Wesley Chapel, Trinity, New Tampa, Business ProfessionalsNew Tampa Networking Lunch at Glory Day’s Grill New Tampa11:30 AM
Professional Business Networking with RGAnetwork.netNew Tampa RGA Chapter ~ Glory Days Meet your next referral partner!11:30 AM
Thinkful TampaThinkful Webinar || Intro to JavaScript: Build a Virtual Pet12:00 PM – 1:30 PM EDT
Global Networking SummitNetworking Brunch12:00 PM
Pasco County Entrepreneurs & Business Owners All WelcomeWednesday Business Networking Lunch New Port Richey at Widow Fleatchers12:30 PM
Network After Work Tampa – Networking EventsHow to Maximize LinkedIn Virtual Summit1:00 PM
Block Co-op – Bitcoin Crypto Blockchain OrlandoBitcoin/Crypto. Buying, Selling and sharing ideas. Small group atmosphere.1:00 PM
Free Video Production Classes – TV/InternetSocial Video Marketing Tips(ONLINE CLASS)-FREE for Hillsborough County Residents4:15 PM
UiPath RPA TampaTest Automation using UiPath Test Suite – Developer Series – Part 2 of 45:00 PM
Entrepreneurs & Business Owners of Sarasota & BradentonVirtual Networking Evening meeting Every TUESDAY5:30 PM
Professional Business Networking with RGAnetwork.netVirtual Networking Evening Meeting5:30 PM
Thinkful TampaThinkful Webinar || Learn Data Analytics With Thinkful6:00 PM – 7:30 PM EDT
AGM Marketing WorkshopsMarketing Workshop for Thumbstopper Ads6:00 PM
Tampa Bay SQL Server User Group (TBSSUG)TBSSUG Monthly Meeting6:00 PM
Critical Hit GamesMarvel Crisis Protocol Night6:00 PM
Tampa HackerspaceWeekly Open Make Night6:00 PM
Toastmasters District 48Seminole SPC Toastmasters6:15 PM
Coders, Creatives, and Craft BeerStartupBus Warm-Up at Green Bench6:30 PM
InFLOWential Leader & Entrepreneur Community SocialInFLOWential Leader & Entrepreneur Community Social6:30 PM
Tampa Investor/Training MeetupTampa Bay Investor Training6:30 PM
Saint Petersburg Book Club Meetup GroupJuly Book Club6:30 PM
Tampa Investor/Training MeetupTampa Bay Investor Training6:30 PM
Pinellas WritersWeekly Group Meetings – All Writers Welcome!6:30 PM
Tampa – Sarasota – Venice Trivia & Quiz MeetupTrivia Night – Moose Lodge 2117 Smartphone Trivia Game Show6:30 PM
St. Pete Beers ‘n Board Games for Young AdultsSt. Pete Beers ‘n Board Games Meetup for Young Adults7:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!D&D Adventurers League at Armada Games7:00 PM
Crypto/Trading/Online Business/Entrepreneurship nightsCrypto/Trading/Online Business/Entrepreneurship Nights7:00 PM
Tampa Bay Coalition of ReasonOnline: Tampa Bay Technology Center (TBTC) Monthly Meeting7:00 PM
Geekocracy!Dinner at Shaker and Peel7:00 PM
Cryptocurrency/Blockchain Education – Palm HarborLet’s talk Decentralized Finance!7:00 PM
IIBA Tampa BayBABOK IIBA Tampa Bay Study Group7:00 PM
Low Light Photography GroupLow Light Photo Group7:00 PM
Florida Center for Creative PhotographyAMA – Ask Me Anything Related to Photography, Computers and Software7:00 PM
Communication Skills for Quiet PeopleThe Guide to Beginning a New Relationship for Introverts7:00 PM
Ironhack Orlando – Tech Careers, Learning and NetworkingThe basics of Data Analytics 📈7:00 PM
Orlando Adventurer’s Guild[Online SEASONAL] Icewind Dale: Rime of the Frostmaiden – DM Canon (Tier 2)7:00 PM
DOUX — Downtown Orlando UX MeetupDiary Studies for UX Research7:30 PM
TB Chess – Tampa Bay – St. Petersburg Chess Meetup GroupLet’s play chess at 54th Ave Kava House!7:30 PM
Shut Up & Write!® TampaOnline Event: Shut Up & Write on Zoom7:45 PM
Want to Make More Connections by Improving CommunicationSecrets of Good Communication8:00 PM
Communication Skills for Interviews and LifeHow to Increase Your Confidence and Communication8:00 PM
Thinkful TampaThinkful Webinar || Data Science vs. Data Analytics9:00 PM – 10:30 PM EDT

Wednesday, July 20

GroupEvent NameTime
Cigar City ToastmastersCigar City Toastmasters MeetingSee event page
Business Networking for Entrepreneurs of ColorVirtual Business Networking – Entrepreneurs of Color7:00 AM
1 Million Cups – Orlando1 Million Cups – Orlando Weekly Meetup8:30 AM
North Tampa Networking GroupBusiness networking9:00 AM
Tampa Bay WaVEOPEN/FREE Coworking for Veteran Entrepreneurs9:00 AM
Christian Professionals Network Tampa BayOnline Mastermind 3rd. Wednesday11:00 AM
North Sarasota Happy Hour NetworkingBusiness Networking Lunch11:30 AM
National Association of Entrepreneurs Mastermind GroupNational Association of Entrepreneurs Mastermind Group Meeting11:30 AM
Network Professionals Inc. of South Pinellas (NPI)NPI North St. Pete Networkers Chapter – Exchange Qualified Business Referrals11:30 AM
Entrepreneurs & Business Owners of Sarasota & BradentonSarasota Business Networking Lunch All Welcome, Just purchase Lunch!11:30 AM
Wesley Chapel, Trinity, New Tampa, Business ProfessionalsLutz, Wesley Chapel, New Port Richey Networking Lunch11:30 AM
Tampa Bay Business Networking Meetings & MixersBrandon Networking Professionals Networking Lunch11:30 AM
Young Professionals Networking JOIN in and Connect!Brandon Business Professionals Just Love Coffee11:30 AM
Sarasota Real Estate Investors Assoc. (Sarasota REIA)Successful Social Media Strategies12:00 PM
Web Design And SEO/SEM Three Sixty DegreesWeb Design And SEO/SEM Three Sixty Degrees12:00 PM
Success Strategies for Business OwnersHow to Perform Insightful Market Research and Generate Free Client Lists12:00 PM
Thinkful TampaThinkful Webinar || Intro To Data Analytics: Tableau Basics12:00 PM – 1:30 PM EDT
Professional Business Networking with RGAnetwork.netNew Port Richey Professional Business Networking Lunch Widow Fletchers12:30 PM
Pasco County Entrepreneurs & Business Owners All WelcomeWednesday Business Networking Lunch New Port Richey at Widow Fleatchers12:30 PM
Tampa Startup Founder 101How to Leverage a Financial Model to Supercharge Your Business (Online)1:00 PM
Free Video Production Classes – TV/InternetDigital Video Editing Class (ONLINE CLASS) -FREE for Hillsborough residents only1:00 PM
Orlando Digital Media Design MeetupVirtual Class: Designing with the Adobe Mobile Suite4:30 PM
Brandon BoardgamersBoard Gaming – In Person5:00 PM
The Tampa Chapter of the Society for the Exploration of PlayPlaying Games in the Alley5:00 PM
Florida Startup: Idea to IPOFREE WEBINAR: How to Outsource Development of Your App5:00 PM
Florida Center for Creative PhotographyFCCP 2022 Virtual Photo Challenge 7. Long Exposure (Up to five photos)5:00 PM
Tampa Gaming GuildWednesday Board Game Night5:30 PM
Brews N Board GamesBoard Game Night at Gatlin Hall Brewing6:00 PM
Thinkful TampaThinkful Webinar || Free Crash Course: JavaScript Fundamentals6:00 PM – 7:30 PM EDT
Tampa Bay MetaverseMetaverse for beginners6:00 PM
DigitalDeLandDigital DeLand Monthly Meeting6:00 PM
Saint Pete BoardgamersBoard Game Night6:00 PM
Continuous Improvement Network (CI Net)C.I.NET MeetUp6:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!Hobby Night – Minis Painting Tips & Tricks at Armada Games6:00 PM
Young Professionals Networking JOIN in and Connect!Evening Networking Pasco County Entrepreneurs & Business Owners All Welcome6:00 PM
Tampa Bay Business Networking Happy Hour/Meetings/Meet UpLutz /Land O Lakes /Odessa /Trinity Evening Networking Dinner All Welcome6:30 PM
The Weirder Things Book ClubThe Southern Book Clubs Guide to Slaying Vampires-final6:30 PM
Tampa Bay Atlassian Community EventsTampa Bay Atlassians Takeover Magnanimous Brewing!6:30 PM
Tampa DevsTDevs – Meet & Greet @ Armatureworks [with Tampa20s and 30s groups]6:30 PM
Central Florida CitySecCigarCitySec Meetup7:00 PM
Central Florida AD&D (1st ed.) Grognards GuildNew Beginnings & Old Rivalries7:00 PM
Toastmasters District 48Carrollwood Toastmasters Meetings meet In-Person and Online7:00 PM
Castaways Euchre ClubCastaways Euchre Club7:00 PM
Tampa Bay Bitcoin[Virtual] Tampa Bay Bitcoin Meetup: News, Markets, & Community7:00 PM
Communication Skills for Quiet PeopleHow to Communicate Effectively7:00 PM
Tampa Hackerspace3D Printing Orientation: Models and Slicers7:00 PM
Tampa Bay Beach and Sunset Photography and Modeling ClassesImage Editing Workshop7:00 PM
Nerd Night OutGames & Grog – Party Games Social Night7:00 PM
Tampa – Sarasota – Venice Trivia & Quiz MeetupSmartphone Trivia Game Show at Wilders Pizza7:00 PM
Learn Cybersecurity Tampa | Flatiron SchoolFlatiron School | Info Session | Virtual8:00 PM
Thinkful TampaThinkful Webinar || Enhancing Your Career With Mindfulness9:00 PM – 10:30 PM EDT
Tampa / St Pete Business ConnectionsBrandon Business Professionals IN Person!!!!11:30 PM

Thursday, July 21

GroupEvent NameTime
Bianca Baez with United Wealth EducatorsBusiness Networking eventSee event page
Raysa Santiago Regional Vice PresidentBusiness Networking EventSee event page
Doris Muller for NPI Westchase ChapterBusiness Networking Event for Local ProfessionalsSee event page
Young Professionals Networking JOIN in and Connect!Tampa Young Professionals Virtual Networking Thursday Morning All WElCOME7:30 AM
Professional Business Networking with RGAnetwork.netVirtual Networking Breakfast Thursday’s7:30 AM
Wesley Chapel, Trinity, New Tampa, Business ProfessionalsBusiness Over Breakfast ~ Happy Hangar IN PERSON JOIN US!7:30 AM
Pasco County Entrepreneurs & Business Owners All WelcomeHappy Hangar Early Bird Professionals Networking7:30 AM
Network After Work Tampa – Networking EventsReal Success Live Online Summit9:30 AM
Orlando Melrose MakersIn-Person: Makerspace Open Lab10:30 AM
Young Professionals Networking JOIN in and Connect!The Founders Meeting where it all Began! JOIN us! Bring a guest and get a gift11:00 AM
Block Co-op – Bitcoin Crypto Blockchain OrlandoCrypto Set-up Class -Limited to 5 Seats Only11:00 AM
Florida Startup: Idea to IPOHow to Cut Product Development Costs by up to 50%!11:00 AM
Business Game Changers GroupClearwater Professional Networking Lunch11:00 AM
Tampa / St Pete Business ConnectionsClearwater/Central Pinellas Networking Lunch11:00 AM
Orlando Cybersecurity Meetup3 cyberattacks you can launch in your network to test your SIEM11:00 AM
Tampa Bay Business Networking Happy Hour/Meetings/Meet UpPinellas County’s Largest Networking Lunch and your invited!11:00 AM
Network Professionals Inc. of South Pinellas (NPI)NPI Power Lunch – Exchange Qualified Business Referrals11:30 AM
Pasco County Entrepreneurs & Business Owners All WelcomeWesley Chapel Professional Networking Lunch at Chuck Lager America’s Tavern11:30 AM
Toastmasters District 48Sarasota Speakers Exchange Toastmasters12:00 PM
Thinkful TampaThinkful Webinar || UX/UI Design: Designing A UX Case Study12:00 PM – 1:30 PM EDT
“Learn and Earn” Millionaire Mind Secrets & NetworkingOnline Zoom! Millionaire Mind Lunch; Book Club and Networking!12:00 PM
Free Video Production Classes – TV/InternetYouTube Basics (ONLINE CLASS) – FREE for Hillsborough County Residents3:00 PM
Tampa – Sarasota – Venice Trivia & Quiz MeetupTrivia Night – Bunkers Bar of Sun City Center Smartphone Trivia Game Show5:00 PM
Tampa Professional Networking MeetupHappy Hour Networking – Cigars, Fine Wines and Brews5:00 PM
Florida Center for Creative PhotographyFCCP Weekly Photo Assignment 80: Leading Lines5:00 PM
Tampa SEO & Internet Marketing Meetup with Steve ScottTampa SEO and Internet Marketing Meetup with Steve Scott6:00 PM
Summerfield Board/Card Game NightSummerfield Tabletop/Board/Card Games6:00 PM
Orlando Digital Media Design MeetupVirtual Event: Adobe Illustrator Level 36:00 PM
Brandon and Seffner area AD&D and Rifts (Palladium) Group1st ed AD&D Campaign.6:00 PM
Tampa SEO & Internet Marketing Meetup with Steve ScottWhere to Focus Your SEO Efforts for the Rest of 2022!6:00 PM
Critical Hit GamesStar Wars Night6:00 PM
Magic the Gathering Tampa/Brandon/St PeteNerdy Needs (Casual Thursday Commander Night)6:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!D&D Adventurers League at Critical Hit Games6:00 PM
Thinkful TampaThinkful Webinar || Intro To Data Analytics: Excel Basics6:00 PM – 7:30 PM EDT
Artists and Musicians Embracing Web3Artists and Musicians Embracing Web3: First Meet and Greet6:00 PM
Orlando Board Gaming Weekly MeetupCentral Florida Board Gaming at The Collective6:00 PM
We Write Here Black and Women of Color Writing GroupVirtual Writing Get Downs- Share It Now!6:00 PM
Tampa Bay AgileLean Beer for All Things Agile (Tampa)6:30 PM
Tampa Ybor Free Writing GroupWriting Meetup6:30 PM
Bradenton Photo GroupBeyond Camera Basics6:30 PM
Meet Me In The MetaverseMeet Me In The Metaverse – Florida’s First Web3 Metaverse Meetup7:00 PM
Tampa Bay Coalition of ReasonSkeptical Inquirer Presents: Why Mass Hysteria is Thriving in the 21st Century7:00 PM
Cocktails and Convo: Book club for RomCom LoversBook review: Dial A for Aunties by Jessie Q Sutanto7:00 PM
Tampa Hackerspace3D Printer Orientation: Printing at Tampa Hackerspace (THS Members only)7:00 PM
Business Networking for Entrepreneurs of ColorDigital Products Training & Virtual Business Networking7:00 PM
3D Printing OrlandoIntro to OpenSCAD7:00 PM
Tampa Bay BitcoinBitcoin Only – BitDevs7:00 PM
Tampa HackerspaceLaser Cutter Orientation (Members Only)7:00 PM
The Tampa Ruby BrigadeTampa.rb: Mystery Meetup!7:00 PM
Live streaming production and talentLive streaming production and talent7:00 PM
Tampa or Saint Petersburg Businesses Development GroupWe help you with your business hurdles and growth strategies.7:00 PM
Orlando Lady Developers MeetupCoding Challenges with Vanessa8:00 PM
Florida Scrum Master and Product Owner TrainingSprint Planning – Input and Output8:30 PM
Thinkful TampaThinkful Webinar || Intro to Data Analytics: SQL Fundamentals9:00 PM – 10:30 PM EDT
Tampa Bay Data Science GroupPyLadies/TBDSG: Customer Lifetime Value6:00 PM

Friday, July 22

GroupEvent NameTime
RGAnetwork.netInternational Professional Networking JOIN us to grow your businessSee event page
Winter Park Toastmasters – Learn while having FUN!Improve your communication, listening, and leadership skills7:15 AM
Tampa Bay AgileLean Coffee for All Things Agile (Westshore)7:30 AM
Laid Back Leads GroupLaid Back Leads Group8:00 AM
Brandon Biz ProsBuild your Business with Brandon Biz Pros8:30 AM
NTi Port Richey, FLNTi New Port Richey – Business Referral Network9:00 AM
Toastmasters District 48Real Talkers #73069:15 AM
Christian Professionals Network Tampa BayImprove Speaking Skills & Build Confidence9:25 AM
Women Who Code TampaWomen Who Code Tech Summit: BlockDataPy10:00 AM
Tampa Bay Tech Career Advice ForumMastering LinkedIn with Taylor Desseyn10:00 AM
Front End CreativesMastering LinkedIn with Taylor Desseyn10:00 AM
Young Professionals Networking JOIN in and Connect!Friday Business Introductions JOIN us at Cafe Delanie All Welcome11:30 AM
Tampa / St Pete Business ConnectionsInternational Professionals Networking Meeting11:30 AM
Professional Business Networking with RGAnetwork.netFriday International Business Introductions at McAllisters Westshore11:30 AM
Tampa Bay Business Networking Meetings & MixersFriday Business Introductions!11:30 AM
Powerful Women NetworkingS Orlando/Dr Phillips: Join us for fun connection growth & networking too!11:30 AM
Tampa Bay Business Networking Happy Hour/Meetings/Meet UpInternational Networking Westshore McAlisters Deli11:30 AM
Data and AI Central Florida User GroupSurviving the Digital Transformation (Workforce needs)12:00 PM
Thinkful TampaThinkful Webinar || What Tech Career Is Right For Me?12:00 PM – 1:30 PM EDT
DEF New Agent TrainingPart I, wk 2, Alphabet Soup1:00 PM
Orlando Power BI User GroupData Perspective in Power BI | Pragati Jain1:00 PM
Toastmasters District 48MESSAGE CRAFTERS5:30 PM
Tampa Gaming GuildFriday Board Game Night5:30 PM
Thoughtful WritingPhilosophy in Writing6:00 PM
Critical Hit GamesMTG: Commander FNM6:00 PM
MakerFX MakerspaceMakerFX Makerspace 3D Printing Guild6:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!Board Game night at The Strange Realms in Carrollwood Friday, 6 PM6:00 PM
Thinkful TampaThinkful Webinar || Intro to HTML & CSS: Build Your Own Website6:00 PM – 7:30 PM EDT
Toastmasters District 48Positively Speaking Toastmasters6:15 PM
Suncoast Critical Thinking Discussion GroupFriday Night Putt-putt!6:30 PM
3D Printing Orlando3D Printing Hang Out7:00 PM
Book HavenAnthem by Noah Hawley7:00 PM
Oviedo Middle Aged Gamers (OMAG)Tabletop: Friday Board Game Night7:00 PM
Orlando Adventurer’s GuildCanon’s Custom Campaign Moonsea Tour – DM Canon (Tier 3)7:00 PM
Gen GeekFamily feud7:30 PM
Thinkful TampaThinkful Webinar || What is UX/UI Design?9:00 PM – 10:30 PM EDT

Saturday, July 23

GroupEvent NameTime
Central Florida Philosophy MeetupWake Up and Think Clearly Saturday morning share and discuss.7:00 AM
Toastmasters Division GEarly Bird Ocala8:00 AM
Florida Center for Creative PhotographyFREE – Learn Your Camera Series, part 2 – Shutter Speed9:00 AM
Chess RepublicCoffee & Chess: Tampa Midtown9:30 AM
Tampa HackerspaceWood Shop Lathe 101 (Members Only)10:00 AM
Orlando Lady Developers MeetupCode with me – learning sessions weekly on Saturdays10:00 AM
Tampa Alchemist Nation – Real Estate and Wealth BuildingDouble Your Income in 52 Weeks: Millionaire Wealth Principles10:00 AM
Orlando Melrose MakersIn-Person: Makerspace Open Lab10:30 AM
Gen GeekDisc Golf @Cypress Point10:30 AM
Critical Hit GamesStar Wars Legion Tournament11:00 AM
Tampa Gaming GuildSaturday Gaming11:00 AM
Thinkful TampaThinkful Webinar || Bootcamp Alumni Success Secrets12:00 PM – 1:30 PM EDT
Oviedo Middle Aged Gamers (OMAG)Golf Group – Starfinder12:00 PM
Tampa Bay Coalition of ReasonJuly- N. Pinellas Book Club12:00 PM
Toastmasters District 48Advanced Articulators Toastmasters1:00 PM
Suncoast MakersFREE Fab Lab Orientation1:00 PM
Central Florida AD&D (1st ed.) Grognards GuildFifth Annual Summer AD&D Tournament (In Person)1:00 PM
Central Florida Florida Foam Fighting (Fumetsu)Fighter Practice! (Newbies welcome)2:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!Saturday MTG Draft at Hammerfall Games and Collectibles3:00 PM
Orlando Adventurer’s Guild[In-Person] The Wild Beyond the Witchlight – DM Calvin (Tier 1)5:00 PM
Orlando StoicsIN PERSON: Social Contract Theory (Part 5)6:00 PM
Thinkful TampaThinkful Webinar || UX/UI Design: Wireframes and Prototypes6:00 PM – 7:30 PM EDT
Nerdbrew EventsCommunity Hang-out Night7:00 PM
Nerd Night OutNB Community Hang-out Night!7:00 PM
Thinkful TampaThinkful Webinar || Data Analytics: Tools of the Trade9:00 PM – 10:30 PM EDT
Gen GeekKARAOKE (Private Room) at Gangchu Chicken and Beer9:00 PM

Sunday, July 24

GroupEvent NameTime
Florida Center for Creative PhotographyFree – Adobe Lightroom Classic CC Class9:00 AM
Toastmasters District 48Clearwater Sunday Speakers Toastmasters Club9:30 AM
Thinkful TampaThinkful Webinar || UX/UI Design: Creating A Design System12:00 PM – 1:30 PM EDT
Board Games and Card Games in Sarasota & BradentonGames at Descent Into Gaming12:00 PM
Orlando Photo + Design MeetupPhotographers & Performers Headshots2:00 PM
Drunk’n Meeples West PascoWeekend Game Day2:00 PM
Tampa Bay Gaming: RPG’s, Board Games & more!D&D Adventurers League at Critical Hit Games2:00 PM
Critical Hit GamesD&D Adventurers League2:00 PM
Orlando Business Leadership and Development Meetup GroupGet to Know You Session3:00 PM
Tampa HackerspaceSew Awesome! (Textile Arts & Crafts)5:30 PM
Lithia Dungeons & Dragons And Gaming Guild5E (ish) AD&D – Humble Beginnings Campaign (Trouble in Elm).6:00 PM
Tampa HackerspaceLet’s Learn to Turn Pens!6:00 PM
Brandon and Seffner area AD&D and Rifts (Palladium) GroupPalladium Rifts game6:00 PM
Orlando Adventurer’s GuildJuly Session Zero: Creating a Character6:00 PM
Thinkful TampaThinkful Webinar || Intro to JavaScript: Build a Virtual Pet6:00 PM – 7:30 PM EDT
Nerdbrew EventsHidden Gems Night, Presented by A Duck!7:00 PM
Nerd Night OutA Duck Presents NB Movie Night7:00 PM
Solana – TampaOffice Hours8:00 PM
Thinkful TampaThinkful Webinar || Learn Data Analytics With Thinkful9:00 PM – 10:30 PM EDT

Do you have any events or announcements that you’d like to see on this list?

Let me know at joey@joeydevilla.com!

Join the mailing list!

If you’d like to get this list in your email inbox every week, enter your email address below. You’ll only be emailed once a week, and the email will contain this list, plus links to any interesting news, upcoming events, and tech articles. Join the Tampa Bay Tech Events list and always be informed of what’s coming up in Tampa Bay!