I am not self-taught. I went to school to obtain a B.S. in Computer Science. I’ve been in the industry for one year. This is not to say that having a CS degree is a requirement (as there is a plethora of evidence to suggest otherwise), but to acknowledge that this is my journey. It may be completely different from yours, yet we can still end up in the same city, same office, same team, doing the same job. I've seen it and can attest that it is possible to learn on your own!
There are plenty of resources available online to start programming. In addition, computer technology has a variety of domains, including database management systems (DBMS), internet of things (IOT), web development, and more to explore once you get the hang of it.
I'm listening... What do I have to do?
The principal step for beginning developers is to choose ONE programming language to start. This is because there are underlying foundations for all languages and too many growing languages to count on one hand, so let’s get really good at building with one.
I like to say that “Programming languages are really the same language but with different accents.” For example, one nuance amongst “language neighbors” is that the way a programmer declares, or names, variables may differ.
There are so many languages. Which do I choose?
Here is a list of common languages today:
HTML/CSS/Javascript - These are all different languages, but with niche purposes. In conjunction, they are used to build the frontend (let’s say visible) parts of the webpages we use daily. HTML is for the bareboned text of the page, CSS is for the styling, and Javascript is used for the page’s functionality. Javascript can also double as the language for backend work. You may find this a good option to get started and get results!
Java - My first language. Used mainly for backend development. It’s part of a cluster of languages called object-oriented programming (OOP) languages. This, in and of itself, is a separate detailed post. It is slightly more tedious to learn in the beginning, but not impossible and very useful in the end.
C++/C# - Not interchangeable with Java, but tends to be spoken in the same sentence. The primary difference is that these are platform dependent, which is useful for game development. C# is also more proprietary and associated with a Microsoft development stack. A development stack is a specific group of technologies used in building an application.
Swift/Kotlin - These are used for mobile application development. The former is reserved for iOS development. Built by Apple, for Apple. The latter is for Android development and similar to Java.
Python - Tends to look the least like the other languages, while maintaining the necessary concepts. One of the hottest and more versatile of the languages because of the gentle learning curve and readability. It’s a “code what you mean and mean what you code” type of language. This is another option that I suggest using to get your feet wet.
As a beginner, I recommend starting with Python or Javascript, but feel free to choose one that piques your interest. There are more than these, and, unfortunately, you will encounter people at arms about the “better” language. But it is up to you as a programmer; it all comes down to purpose and preference.
Nice to know my options. Where do I start the learning process?
Once you’ve settled on a language of choice, you can start filtering out all of the internet code-torial noise.
freeCodeCamp.org - I hear rave reviews for those that go into bootcamp or apprenticeship that attribute this site as their starting point. FREE
Test Automation University - Abbreviated as TAU. Up and coming but also highly appraised. I’ve used this myself and found a better understanding of concepts that I’ve been using for yeaarsss in Java. I’ve also used it to learn Python in a couple days. It includes code-alongs and quizzes to test your understanding. FREE
Udacity - A popular site with a wide variety of content. However, you have to pay for some. I have not used this.
codecademy - This is very helpful! I used it to learn Angular when I was short on time. It includes code-alongs to build something as you’re learning. It may offer a pro version, but, for your purposes, you can get what you need for FREE.
Youtube - I think it’s underrated. When I’m doing something specific and snapshots from tutorials are not helping, I resort to Youtube to get what I need done. Sometimes, videos better explain the missing links between the snapshots. Also FREE.
Some languages are maintained by a company or organization, and may come with their own tutorials, such as ReactJS. You can find these with a simple Google for the language.
Whichever resource you choose, find a tutorial, start it, and stick with it! Any final product, no matter how unappealing or inefficient the code, is an accomplishment. I proudly claim my code, even if I don't want it to ever see the light of day. But that’s what makes us programmers. Always learning, always improving, always spending too much time on semicolons.
Top comments (17)
I am partial towards Java. Yes it feels like lot of boilerplate code and restrictive format. Everything needs to be within class. There are rules on what can inherit and what can encapsulate. But in the end, you develop a strong sense of how to architect your code. Something that python or c++ like multi-paradigm languages can't enforce within you as you would always take the path of least resistance and only try to structure code for sake of reducing repetition.
The main point is that you should be able to structure code even before you begin typing it. Structuring after you have written code is bad productivity
And once you master one programming language, other languages are just different syntax. I have coded in PHP, JS, Kotlin, Swift, TS, Java and C# and Only issue I ever had to deal with was when legacy code was badly structure. My peers can understand how my code works because of the structure. Even in kotlin which provides a lot of flexibilities over java.
pros and cons about your point, I agree that
I don't about
You develop a strong sense of how to use OOP, for years I was trapped in that limited frame, is not easy to see beyond that once you get inside that box, OOP is not the best for everything, has it's merits and its problems, not every project will benefit from it, to limit oneself to one paradigm is not what I would suggest to a new user. That is exactly why I wouldn't suggest Java and to chose a multi-paradigm PL instead, to try to solve a problem with OOP and then re-implement and re-design in functional or other paradigm to understand the differences, pros and cons is a much better exercise to me, than just marry OOP and memorize whole Java boilerplate. You may even become a Haskell weirdo or a Lisp master.
Yes you are right, I should have been more clear about it. And I can share your feeling about trapped mindset. I worked on ruby on rails years ago and I struggled to adapt the meta-programming mindset. I have straight forward avoided using functional programming even though I love elixir as technology stack. Even today, for kotlin and Java lambda's, I struggle a little. For lambda's, My path of least resistance is to write code as I know, and then let android studio take over to convert my code to lambda.
OOP is not best for everything. But it is a good starting point to learn relationships and flow between code. With my dealing with college freshers, I have felt that those with good oop concepts can adapt to other coding paradigm easily, in contrast to those freshers who didn't. I have to review their code less.
One of the fresher working on a PHP project constantly objected our MVC-like approach citing its unnecessary to separate HTML and PHP logic into different file. ( I am living in a so called non-IT city in India where coaching classes still teach PHP 5.1, and college still uses borland c++ 5 to teach students).
I think mileage varies from person to person. Java has a benefit (or curse) of strict coding styles which means when teaching it to students, It's less distracting, because even though you can use your own coding style, community expects you to adapt default guideline. In the end, you have one less thing to worry about.
And like I said, Once you gain some work experience, working on any other language is just adapting its syntax and limitations. I switched my career from Java Servlets to PHP 7 years ago, and last year I switched it to Java and kotlin for android development. The difference between strict type and loose type language was nothing which google can't solve ;)
give functional a try, I started to dig into it when I started with Rust without even noticed; after a while I realized that my code naturally started to get more functional and that was just trying to make it more clear to me; the realization was almost freaky to me. Specially because since the university I always leaned to OOP, first with C++ and then with Python.
Thank you both for your insight!
Great article 👍
Only thing I'd add is that when we say “Programming languages are really the same language but with different accents” (I've been known to say things to the same effect), this only applies to imperative/procedural languages which are influenced heavily by C.
Functional languages like Haskell and Clojure look and are very different. Historically it wouldn't have been worth mentioning because Object-Oriented was the accepted paradigm, but since more and more languages are incorporating things like lambda expressions, I'd say it's worth a beginner knowing the origins of that sort of syntax.
Thanks! The article is a bit telling of my own depth of knowledge. I've dealt with OOP languages for the most part, but this backstory seems worth looking into.
We all have our strong and weak points! And it wasn't meant as a jab at your knowledge. Really useful article 🙂
I'm helping my spouse learn Python, so +1 on that for me. Her experience really opened my eyes to how hard it is to learn and teach technology.
The english-like syntax is the biggest thing that helps both of us every day. The other two bit things are (1) the tools are really good. We're using VS Code which has a great Python plugin. (2) She's building a web app and the Python support for all the APIs she needs is pretty good. It's generally a "first class" language for the major services like Stripe, Auth0, and so on.
+2 for converting another one over to the coding side. I would love to hear about how the experience is going. What was the biggest hurdle for teaching it?
Thanks 😊. Overall I'm really enjoying it these days. I think she is enjoying learning, but even after ~10 months there are still a lot of concepts and jargon that are completely foreign. I didn't realize how much of software engineering relies on acronyms!
The first memory I had of teaching her was explaining how the terminal is just another UI into the computer's underlying functionality (compared to GUIs and voice commands). But to do that, I had to explain what was under the hood in a computer. And down that rabbit hole we went!
These days, she has an app on Google App Engine (leksi.co if you're interested). It's a flask app with a Vue JS frontend. Architecturally, it's using a bunch of different APIs, using background queues & workers, and even has to do some complicated database operations and distributed coordination (she's generating a bunch of MP3s in separate processes and then combining them all together in the final step).
The easier part for me is explaining the architecture design, but when it comes time to translate that to code, it gets really hard. Kinda reminds me of when you can understand a spoken language, but it's crazy hard to actually speak to someone.
You gave me an idea to write about my experience teaching (with her permission).
I don't think that Python is a good starting point. Maybe I do not know too much about it, but my experiences are that Pythons module system is crapy. I often had to fix those "Module not found" errors. This may of course be a result of less knowledge but this can be a stopper for beginners I think and frustrates beginners.
I am not sure if you explicitly omitted Udemy in the link area, but they have very good content, too. You just have to wait until they sell everything für 10-12$ which occurs at least at 300 of 365 days in the year xD
I'm just getting into Python at the moment (I come from JavaScript land) and yeah you're right the module system is awful. But at a first glance I'd say it looks like a good language for beginners in spite of that. It has all the features a beginner needs to learn about but is more forgiving than a language like Java.
The number one tip - REPS, REPS, REPS, REPS.
You'll find people saying that you only need to spend a few hours a day, and you'll pick up things in no time. I disagree to the max. If you have a job then totally I do understand the time commitment, but in order to learn something you have to put in the work every day. (damn I sound like a workout commercial or something). But it's true.
The more reps, the more you retain, the bigger the learning gains. I don't think it matters where you start, especially if your mind is a blank slate and has no programming knowledge. Yes, some places are better than others to learn but you just gotta step up and get going.
Reps can include anything from viewing other peoples code, writing your own code, taking tutorials, building projects. The number one way I initially learnt web development was downloading templates of HTML online and viewing how people used code to build a web page. And changing small things to see what they did. The more I did this, the better I became at building my own webpages. It would be the same in programming - downloading code and seeing things like how did they setup functions, how did they reverse that array etc etc.
I agree. Practice is a huge! Also, something that you implicitly mentioned: exploring the code. I learn the same way. Kudos to you for that!
Great read. I got my first technical job this year. If I may add codewars to the list too, I enjoy solving the problems and increasing the difficulty with the site. Plus you build up a score too.
Congratulations on the new position! I have not heard of codewars, but I'll check it out.