First and foremost, I would like to state that I would recommend teaching yourself to code but, there are a few times when this could backfire which is something I think is important to discuss.
The Beginning
I started teaching myself from a young age, 15 if my memory serves me right (I'm 23 now), it was difficult, tedious but extremely fun and satisfying, this was way before they offered computer science as a subject in UK high schools meaning that I never had anyone to really turn to for questions or best practices which is really where some of the issues stemmed from - I became reliant on google.
The first piece of code I wrote was not a "hello world" but a Minecraft mod (I still think its pretty cool though). I remember seeing Markus Pearson develop Minecraft and thought that it was the coolest thing I've ever seen, making numbers and letters do stuff on the computer, it was amazing! How is he able to do this? (I was young...).
"Get it working"
When I started it I focused too much on the 'get it all working' instead of planning, designing, understanding the issue, debugging (properly), and ensuring my code was clean. I've spoken to a number of my friends and colleagues that are self-taught and they agreed on this point so I suspect these branch further out than my inner and outer circle. I jumped headfirst into getting code down (and this is something that I still do till this day - occasionally). This seems to be something young or new developers do, they get excited that their code is working and forget about everything else.
"Testing?"
Testing... Come on, I know you never wrote any tests when you were starting out, I sure didn't... I underestimated the importance of tests and testing the functionality of my code, It works... Why have tests? This could be the case if your code is not going to change, but what if it is? Say you're working in a large organization and your code goes through many mutations, you need to ensure that it does what it's supposed to do. I work in the financial sector, I cannot allow for the code I write to make a single mistake because that could be catastrophic. Don't get me wrong, I'm not perfect and I don't opt for a TDD approach each time (I should... but I don't). I think in general we underestimate the importance of tests and this is definitely something self-taught/new developers neglect or place on the backburner.
"You can't teach an old horse new tricks"
A saying - "you can't teach an old horse new tricks". I agree to a point. There are instances when I start writing code rather than sitting back, understanding what it is I'm trying to do, planning out my code, and then start to write. This is something that I learned to do from working in a large organization and from senior developers, a good friend and colleague of mine said this to me when I first started at the company - "Programming is 90% figuring out what to write, and 10% actually writing it".
At the time, I didn't really understand what he meant as back then I was working on "simple" stuff, but oh boy... Once we moved onto bigger and more complex projects, my lack of experience started really showing, and you may attest this to me being inexperienced but these are things that you SHOULD learn at university, and/or some very good programming courses.
It's been a long night and just wanted to get some of my thoughts across, there are a few more points which I may add at a later date or make a part 2 of this post, but the gin has caught up to me.
Goodnight,
Rus.
Top comments (16)
To the point:
"Programming is 90% figuring out what to write, and 10% actually writing it"
😄Thanks for your post. I totally agree on your first point about clean code.
Almost all of my skills I learned in a self-taught manner, the rest is based on experience. So as a self-taught developer you tend to search for problem in the web, and thats completely fine since you learn to search and describe your current challenge which helps you to unterstand it better and break it down to the most important facts.
What you find then is often code-snippets that match your need, that some just copy-paste, which doesn't help you to understand the solution and be prepared for it when faced the next time.
Additionally, those code-snippets contain something like "var x = ...". And thats why code of many developers look cluttery because they give the impression that it's OK when variables or functions are named like this.
In stack-overflow's most-rated answer it's written like that because they don't know your real use-case and that naming is fine in that context.
But stuff should be renamed after implementing it to establish readability.
It is fine when stack-overflow's answers does contain snippets that are not "Clean Code", but it's not ok if your project does.
So after teaching yourself multiple technologies and languages, every developer should start and reflect why they can't read and understand their own code the next day anymore.
Learning the most basic rules of how to write clean code makes totally sense there.
I did it and digged deeper into clean code rules and I would assert that my code-style improved within 2 months, which results into more win that learning a whole new language in that time (because rules are applicable to every language).
Couldn't agree more! More often than not the code on stackoverflow was written quickly and the solve the problem without taking anything else into regard. It's your responsibility to take that code and perfect it! ❤️x2000
I think there is an overlooked and untapped resource for self taught devs. GutHub! You may be using it already but what I am talking about is taking the time to look at the code from popular libraries. I used jQuery for years before looking at the source code, crazy right. The same is true for React today, many devs are using it but few have taken the time to look at the source code. In these projects you can go beyond the copy and paste of single problem and see the entire code structure of a complex library. The other great thing about GitHub is becoming a part of a small community where people will give your code feedback and if your honest with people and tell them your not sure about a section of code they will help you. I wrote recently about getting involved in an open-source project. I think we all should have open source project to work on, you can learn a lot watching other people commit code and discussing topics around the project.
I had fortunate to start learning coding around age of 13. I have started with Java and worked my from there to PHP and my first diploma of finished course. I was far the youngest in group and I loved it. Years passed I ditched PHP for Node then server side and API work till I circle around to Android and Kotlin , and for past few months Swift. Thing is , I have never learned data structures and complex algorithms .. I was always just busy making stuff work and I 100% agree with your point. We have big empty spaces to fill in a future.
Great advice! I’ve found the stuff I’m not interested in learning the hardest to focus on (as does most I’m sure). When you’re self taught, it’s hard to be disciplined enough to sit down and say “I am going to learn about CPU registers today”. I’ve found you have to trick yourself into caring in a way by relating it to something you do care about.
Great post. I would also advise against refactoring too early. Make it work, then polish the code. You end deleting polished code when you have to change a feature you (or the client) didn't plan for.
Make it work -> Write tests -> Refactor.
Agreed!
I am self taught and started learning at around 13 or 14. I'm 43 now. I would say that I still think there is a lot of merit to the "just get it working" approach. I still do a lot of investigative and proof of concept work this way before moving to engineering and before writing tests.
I do agree about certain more complex topics that you would traditionally learn at University, I did have to make a concerted effort to learn these topics. At no point have I ever thought that University would have been a good for for me personally.
Do you remember when UML was a thing LOL. Where are stuff like that by now? I think writing working code first is still the most important, especially with all of these new languages, frameworks, methodologies on the horizon all the time replacing sometime very useful good things from the past with less quality stuff... and my observation is that actually they still do not solve any problems from the past, just force you learn doing the same thing the "new" way, sometimes even worse than before, so you can be happy if you can get anything even work... I am self-taught but later on acquired a computer science degree... Still I am happy if I can write working code first and then worry about planning maybe later... We still have no good tools to do it... Writing clear and clean code is important too but it is also mostly about re-factoring code once it is working...
I think the main problem with self-taught developers without degree is that they sometime lack fundamental knowledge about computation theories, algorithms, databases, operating systems, networks etc... basically everything you need to be able to do software with real value. You need to learn the fundamentals of this profession in the university to be a able to create real value computation... When you really have to plan is when you need to actually compute something complex that needs knowledge of higher level Math. E.g. how to make a computation converge, how encryption works in the background, which one is the efficient to use. How to think and calculate efficiency, scale, parallelisation in respect of highly distributed systems. These profession is not about creating a flashy front-end in React LOL
That is the essence of programming.
TDD is a poor replacement for MOP anyway...
Daft question, but what is MOP?
model-oriented programming!
I completely agree with all of the above points - especially because I'm a thirteen year old developer.
I'm glad to hear! The going will get tough but you gotta keep going. 💪💪