You don't have to learn everything
Steve Ziegler Mar 4
I read Abisekh's post on not knowing what to study next while trying to learn programming and data science.
I really felt for him. He's obviously passionate about wanting to get into the field and learning software development. Many of us in the development community have the same nagging feelings that we haven't learned the right things or haven't kept up. It's the tough part about being in an industry where everything changes constantly. But, as I thought about his post, I reflected on my career and how some things have stayed the same since I was building client server apps in PowerBuilder. These building blocks helped with my career when I wan't able to learn everything.
There will always be a user interface. Given Siri and Alexa these days, it's not always a graphical interface. But, there will be a need to get input from the user and take action on it. Spending time to understand the basics of input data types (string, number, currency, ...), input controls (text box, dropdown, checkbox, radio button, ...), and when to use them will serve you well.
Regardless of language, basic logic and flow control is essential. Every language will have mechanisms to:
- Iterate over sequences or lists with for loops, while loops, and list iterators
- Create and manipulate lists whether they are arrays, linked lists, hashes, or dictionaries
- Branch on conditions using if, if else (spelled a hundred different ways!), and else
As many people recommended in the comments, going deep in a single language first will allow you to master these basics making it easier to apply to other languages.
Most apps will require data storage at some point, whether just in memory or written to disk. Understanding the basics of writing data for future retrieval is major building block for a career as a developer. I would start with a good ole relational database and learn SQL. SQL is a beautiful language. You'll be amazed with what you can do joins, group bys, and sub-selects.
Scott Hanselman has a great post saying that the internet is not a black box. There really aren't many true black boxes in the software world. When things go wrong in these grey boxes, regardless of tech stack, there are lots of tools to help:
- monitor file or directory access (Process Monitor on Windows)
- read logs of systems
- check server performance for CPU or memory hogs
- review DB processes for slow queries or locks
- see web client behavior (F12 as Scott explains)
- understand how a web resource responds to different HTTP verbs and headers (curl or my favorite HTTPie)
- see network traffic (Wireshark)
One constant throughout my career is that people expected my code to work. How rude! Learning to never trust your own code is another valuable career skill. Hammer your inputs with nulls, empty strings, bad data types, wrong combinations, invalid file formats, and bad urls. Luckily, doing this is much easier these days with the prevalence of unit testing tools.
Chances are very high that you will be writing code as a part of team in a organization that contains people. When learning how to code, don't forget to learn how to deal with people. You will need to win friends and influence people. You might find Jon Sonmez's Soft Skills: The software developer's life manual book useful.
While the desire to learn everything may pull at you, focusing on the basics first will provide a great foundation for a development career.