Tackling programming: a first-starters guide to actually make progress

in #technology7 years ago

Hello everyone! I’m glad you landed here.

In the next post I’ll talk about tackling programming on a philosophical’ish and very practical way, with a 50.000 feet view, rather than trying to give you a hands-on technical guide on learning to program.

This is the guide I wish I had BEFORE I even touched a keyboard: one that summarizes some aspects which you actually should think before start coding, and consider what programming is all about from a not-so-technical point of view. I hope it can help you, and guide you on your baby-steps to programming.



Content

  • Cheesy Intro
  • What do you REALLY want to do?
  • Coding vs. Development
  • The path of the developer
  • The path of the programmer
  • How to learn programming for good
  • What to know before you jump
  • What's next? 


Cheesy Intro

Often, people go into the web to learn how to program: with no plan, no objective, and expecting to be the new Zuckerberg of the world is just a couple of weeks. And, more often than not, they miserably fail after having given up, having spent countless hours trying unsuccessfully to build something out from nothing all by themselves, and feeling worthless.

Thing is... The whole concept is wrong. Programming is not about creating things that everyone likes; at first, programming is about creating things YOU like (even professionally, you won't like the code if you don't personally feel proud of it). And without a real motive (more on that later), a real plan, and the willingness to fail countless times until you succeed, you are pretty much doomed to not even be presented with this chance to actually create something you like.

Mind you, coding is just the pick of the iceberg. Is what you see and can relate to... What you see they’re doing… But under the hood, some serious shit is going on. And if you can't see the full picture in a practical manner, you're pretty much doing an exercise in futility.

So, if you are an experienced programmer or developer, read on. I hope at least I can entertain you with some of my ranting and experiences (and hopefully you can disagree on some of them, adding some value to this). And if you're just starting out, perhaps this can give you new insights about the path you're walking.

If you are interested in the real “how to”, and not the blah-blah that supports it, just skip right ahead to “What’s next?”. In any case, read on...  


What do you REALLY want to do?

Let's assume for a moment you started programming. After countless errors, bugs and practice, you no longer have to see the keyboard of so much code you have written. You have an entire library full of example exercises and algorithms you have implemented in your chosen language. You now know how to program.

Congratulations! You have accomplished something terribly abstract and painfully difficult to learn, but now you can affirm that you’re ahead of many. 

Wait… Now what?... Why did you start in the first place? Was your goal to start programming for the sake of it? Was your goal something else rather than just start programming?... Was it money?... Was it fame?... Did you, deep within you, secretly wanted to feel smarter?... Sexier?... Was it because Nolan’s Batman wrote the auto-pilot software for the Bat-wing?...  

There could be countless motives. Infinite goals. And perhaps you could reach them if you started programming. However, thing is... Coding alone won't do anything. Is just a complementary skill, and if you don't tackle programming the right way (combining it with strategy and other steps along the list), you won't get far.

 You REALLY need to know why you are programming (your real motive), and whether or not learning to code will get you there (if there's an easier way to get there, I would strongly suggest you to take it). 


Coding vs. Development 

Programming is, in actually, what the word implies: telling the computer what to do, how to do it and when to do it, on a very, VERY specific way (depending on the abstraction layer of the language, you could even be directly interacting with the machine itself). 

What do you want to program (are you REALLY sure is that?)?... What is the platform you want it into?... How do you want to interact with the UI?... What should the connection protocol be with your main server (do you need a main server to begin with)?... Are you sure that's the right database technology?... 

 These kind of questions WILL rise at some point of your journey, and answering them wrong could lead to a delay of weeks, and even months on your work (been there, done that).

So, before you even decide to input the query on YouTube on "C++ Tutorial", you need to take a step back and acknowledge something: programming is just a complementary skill, something you use to tell the computer what to do (regardless if it's a handheld computer or a desktop PC, the concept is the same), automation, if you may... And in order to tell the computer what to do (regardless of how, exactly, the computer might actually get it done), you NEED to know WHAT IS THAT you are trying to make the PC do and, generally. 

 The coder’s way is to start tackling code in the PC until something useful is created, wrap it up, and continue with the journey. At this stage, you already know the previous questions (or perhaps you just don't care since it's on another level of abstraction) and you're pretty much on the "code monkey" mode (not meaning a depreciative adjective, tough). 

The developer's way is usually more complex: analyzing the problem, designing a solution, cold-testing it and then proceeding to the programming, whether they directly program it or not. It requires  a wider understanding about technologies, procedures and the software development process. 

These are both levels of abstraction which you need to acknowledge and consider when starting out.  

If you are going serious about creating new products, kick-starting some project out of the blue as the CTO of a new venture (whether an app, a video game, or a web page), you NEED to embrace the developer's way: it requires more off-the-keyboard knowledge (less abstract concepts like general design of an informatics solution and sewing the pieces together, comparisons and performances of different techs, software design and development cycles, etc.) to assemble whatever it is you're going to build.  

If you want a job at a prestigious firm, with a good, comfy salary, and a great team to work with, without having to break the head with 50.000 feet problems or managing software development cycles and team deadlines, then it's the coder’s way: you'll specialize on the code, the algorithms and the internal working and programming of the techs chosen to solve the devised informatics problem. Perhaps you'll be aware of the general structure of whatever system you're working on, but you'll most likely work on a tiny part of it (a library or a specific subsystem). 

However, these terms are blurry, very subjective and chances are, at some stage, you'll end up having to handle both sides of the coin. Acknowledging the fact that coding is not the only skill you'll require to build a successful programmer career is a good thing to keep in mind when getting your feet wet.  


 How to learn programming for good 

  There are some advices that could help you start learning any major programming language. 

  1. Tackle projects, not exercises (Learning by creating something new is more resource-wise than learning by practicing). You learn walking by walking; why not do the same with programming?
  2. Create a plan, a series of SMART objectives (+ their corresponding milestones) to achieve that plan, and stick to it religiously. 
  3. Learn the basics of computers and informatics systems (Hardware and software in the core). 
  4. Learn about the software development cycle and process, methodologies and how do teams actually get to do something. 
  5. Get involved in an open-source project when you feel like you can give something to it. 
  6. Get involve with the community (not only online, but offline as well). 
  7. Think about your professional branding (with a web presence, you're more likely to stand out). 
  8. Be ready to stomp on your ego (you must be willing to fail continuously in order to improve and learn programming).

These are advices that will most likely help you to achieve your goal of learning any new major programming language, and will help you assemble your strategy (yes, you need to plan this trough).  

What to know before you jump  

There are a few things you need to keep in mind when you're learning any programming language, which you need to keep in mind (so you can advance faster): 

  1. Google is the know-it-all If you don't know something, Google it. If you can't find it, Google it better. 
  2. YouTube is your tutor Some people feel better by reading and writing, others by watching and imitating... Thing is, YouTube and other video platforms are a HUGE database of knowledge and learning. Don't skip them.
  3. When on panic, ask Stack Overflow This is a great platform to learn and ask many things. Chance are you'll be picked on by making a silly question that had already been answered a couple of times (see point 1) or it's something too basic. However, it's better to be a fool for a minute than to a fool for your life.
  4. Computer programming is only the tip of the iceberg Ordering the computer to do something without having any idea of how she's going to do it could be a terrible mistake. You need to have, at least a very general, knowledge about how computer and informatics systems in general work. The deeper the better. 
  5. Get frustrated, but don't give up Programming is like trying to assemble a puzzle while blindfolded: you'll make mistakes, things will be in front of you and you won't see them, and most of the time (at least at first) you'll feel lost and dumb. Don't. It's the nature of the beast. Stomp on your ego, but don't let go. Programming isn’t easy, but it's worth it.
  6. It will take time No, I'm not talking about days... I'm talking about months, and sometimes, years before you feel comfortable with a programming language, and you can actually do something presentable. It will take time, but it will be worth it.

 What's next? (Conclusion) 

 After this blah-blah that might make no sense at the time, but it eventually will (hey, where are my programming resources?? Where are my YouTube videos?? Damn you!! Where's my step by step to become a Zuckerberg!!), I strongly suggest you to do the following: 

  1. Start thinking on why you want to learn programming If you come to the honest conclusion that there's not an easier way to achieve your goals but to learn programming, go ahead! Don't forget to use Google to double check tough. 
  2. Create a plan fit to your situation Whether you are working a full 8-hour shift daily and absolutely positively need to learn programming ASAP, or just a student who wants to make a video game and have a lot of time to spare, your situation will be unique. Plan accordingly using SMART objectives. Ackquire sources, make a plan, and don't just take my advices (the trick is to actually get a lot of advices, but refine those that actually matter), so Google on… And don't use a single source. Many points of view are better than one.
  3. Execute the plan religiously and update it when you deem it fit Because by the end of the day, things will change, priorities will shift, and you'll need to update your plan. Remember: a plan is worthless, but planning is everything. So don’t feel bad if you need to stop doing something because it’s not working anymore: that’s pretty much the mentality of a programmer.


 That’s it… I hope it helps, and can keep you from running blind-folded into this dangerous enterprise (it can take a lot of your time), which you can easily avoid by having a more practical and little-bit-less idea on what to actually do when learning to program.

 I wish I could tell you programming is an easy fast peasy thing to do… It’s not. You’ll pretty much suffer at times (the better your attitude the less you’ll suffer), and you’ll change. But for the better. You’ll see what I mean in a couple of months.

I'm aware that this information is not quite complete (it can always be expanded), and it can be improved (I'm not a perfect writer), but I hope I got the message trough. If you have any suggestion or would like to contribute with something, you are more than welcome!

Sort:  

@azolot, I gave you an upvote on your first post! Please give me a follow and I will give you a follow in return!

Please also take a moment to read this post regarding bad behavior on Steemit.