Context on development:
After reading tones of posts along dev community I think that the number of users who are learning to code are much higher than user count who is experienced on the industry, in fact, there are loads of articles about begin with X technology and first experiences with that I find interesting but there are other posts about first experiences working as a developer. Maybe you are one of those who are about to start your career on some company.
I'm a senior web dev so I'll write from my point of view, this doesn't mean it's too different from developing on PC or mobile. If you are an experienced dev on those fields please, comment which points are similar and which not.
It's hard to start writing those lines but it's also necessary.
I'll try to cover the facts I saw on the industry on the last decade and point the most common errors on newbies and scholarship holders when on a company. Let's start:
Don't try to change the company, let the company change you
I found many young people that arrives at a given company and begins mouthful of methodologies, design patters, data structures, language preferences and so. This is good for you to practice at home, but you don't know the facts that lead the company to take the decision to use those concrete methodologies, languages and so. Sometimes there's an implicit reason behind that points to the original context on where the app was developed in the beginning.
It can be due to hosting costs, the first devs having a background on a specific language or methodology, a preview analysis or the situation of the industry back those days.
For example I've just started an app with react, but not using concurrent mode, because it's an experimental feature and it's not meant to be in production. Moreover React team recommend you to not use it yet. If I start a company and you come 3 years later you don't have any right (or knowledge) to blame the app for not using it.
There are companies that accumulated too many tech debt but they definitely don't want to refactor their product due to the costs, it's a no return situation where a 20 years old dinosaur APP can't be re-implemented without an elevated cost that the company may not be able to assume at this point and they will try to extend the life cycle of the app as much as possible (see cobol banking or government APPs for example).
Programming Languages
It's common for newbies to think that a language is better "as is" and you can be right on a given context but this does not mean you're right on your own context at this company. I mean, if you are about to write an API service that offers a CRUD for interacting with data, unless you're working with high numbers (which is recommended to work with Java, C# and so due to decimal precision) it doesn't matter if the company uses PHP, Python, Ruby or whatever.
Forget your hate and simply do your job trying to love the language you are using, all of them have some pros and cons. For giving a vague example, PHP gives a faster development while java gives static typing.
Also working on a specific language gives you experience on the others. That's because most patterns, designs, data structures and so, are common or applicable to any language, and the logic you will follow when developing will be almost the same.
Frustration
You can become a developer by three paths (or a combination of them):
- College Grade
- Official Professional certificate/training
- Self Taught
*I don't know if the official professional certificates exists on every country or if they exist with another name, but for purpose they are meant for giving specific acknowledgement on a given path from a career. For example, on south Europe, we have two options for developers, one on web application development and another about multi-platform application development. You need an official institute for coursing them as you'll get an official certificate approved by the government's education department.
If you come from a college grade (IT Engineering) you may found that you learnt a lot of concepts but you hardly can apply them from the beginning. This is because college grades are meant for giving you a basis for you to specialize on some branch of the industry later, not for teaching you to work on a given specialized branch. Don't worry, all you need is a bit of experience and a master degree (commonly 3 years). After that you already faced some problems that you beaten with or without help, but the most important that you should do is trying to solve all your issues by your own, with the help of Google and StackOverflow.
If you come from an official professional certification you will start working fast, they are meant for this, but you can find yourself stuck after (commonly 3 years). This is because you learned to work on a given specific branch but you didn't learn all the basis that an engineering can offer you. To prevent or solve this situation you can immediately begin with your self taught ritual after finishing your certificate. Take as reference the subjects of a career and follow them online, with books, with videos... (I recommend you to read instead on following youtube tutorials. When you are reading, you can copy pieces of content that you consider important, you can stop wherever you want and you need an effort for reading so you'll ensure you're paying attention all the time you spend on this).
Self taught is the worse situation, I'm aware that most of you are following this path so I need to give an advice here that you must follow to success. When you learn something by your own you usually won't know the basis. You want to know "how to do or achieve a X-like APP" and you will put more effort on that things you like more, disregarding the basis, the background and the must-knows about a specific branch. It's difficult to overpass this situation but you need to do it.
I want to learn the easier thing first
I recently read an article of a girl saying she tried to become a developer and she failed. (I tried to find it to share with you but I can't remember where I read it, sorry) She explained her experience and on the following paragraph she stated "I went for front-end because it's more easy".
At this point I shut down my laptop with a frozen smile and walked away.
This girl was assuming for a reason I can't figure out that front-end is easier.
Don't think on being a front-end or back-end developer now, you can't choose because you don't know both careers implications. Back to the old days back end was more difficult, you needed to work with data structures, methodologies, design patterns and so, but nowadays you will need exactly the same on front end, and knowing JavaScript, html, css, sass and preferably TypeScript too. Moreover you must find yourself working on an app that uses graphQL, which means the logic (or part of it) was moved into the front-end part.
I'll share a secret with you: ALL experienced developers (on web) are full-stack developers. Of course each of us manage better some parts of the developing process but if you can't develop an entire app by yourself from scratch to production you are not an experienced developer.
Conclusion: learn the basis of development, learn how the things work in background, learn the foundation of a pair of server side programming languages and the client side programming language (javascript) and the markup and styling languages (html and css). Learn the basis on MySQL and then try to build a simple app from scratch by your own, then decide which part you want to specialize in.
I know it because I read it
If you are reading this, means you are really interested on becoming a developer. This point may be the most important as there are many senior developers that fail into this common error too.
It does not matter what you read, where you read it and the person/people behind the lines you read. You can't assume all that you read as true, it will make you fall on a path where no one who wants to success want to be: Thinking you know a lot while you know nothing.
You can read a 10 year old book of IT engineering concepts or specific facts on a given specialization and may not be entirely true nowadays. I can show you nice things and concepts on 2/3 of my posts but lie you on 1/3 of my articles and you can fall into this trap.
Always check by your own if what you read is true and applicable nowadays or with a given technology for a given context. Even when something is true, it does not mean it's true always.
For giving a silly example that I already explained on my post " What about code linting?" There are people that uses CSS lint without editing it and without knowing why the lint recommends you to do or not to do something. You may find your steps on the hard way developing something with that lint taking in mind I.E. 6 (which is almost 20 Years Old) and earlier support unnecessarily. I must remark UNNECESSARILY, it's a 20 y.o. browser. The global percentile of users using I.E is low, and inside this low percentile, the 98% of users have I.E. 11 so we can assume the 2% of the low global percentile for being using I.E. 10 or simply ignore them completely (unless your company decides to support I.E. 9 which on some markets it's usual, but few few few companies around the world will support older browser versions).
Focus your efforts on learning standard modern tools that fits into nowadays stack on companies. You can check the stack demand on job search websites and the details of what is used on each technology inside posts of people working with them on a company by at least 3 months.
I can't see the results of my effort
You can keep reading tones of articles, following tones of tutorials, but all you are doing is following other one steps.
Build something from scratch by your own, without tutorials, without a friend's help, only you and the machine, 1 vs 1 without shirt, the fight of your life. On this situation you're the bank, and the bank always win. It can be the Shortest war of the history or the longest one but if you learned the basis, the basics and you put effort on it, you will success at the end, and you'll be ready (or near) to apply for a job at this point.
I don't know what to develop
Are you tired of doing ToDo List APPs? Have you tried to consume data from a public API and you are tired of it too? I've the solution to your problems! Copy something adding you own flavor.
For example you can copy Facebook taking the basic features: profile, picture upload, friends list (connections), comments and likes, then making a little bit of analysis and creating a custom UI design that fit with this restricted version.
This should not be difficult to start with when you already know the basics on PHP,HTML, CSS, JS and MySQL, it will last less or more depending on your ability and experience, that's all.
In the house of the blind the one-eyed is the king
Please, do not blind-follow the trends and opinionated statements, it sounds like a repetition from what i said some steps above but I must insist. Know the environment where you are working at. If you want to success as a web developer, you must know how browsers work, the same way if you want to success as an android developer you must know how android works.
Of course it's hard to spend time on this concepts when all you want is to know enough for being a professional developer, but again, you'll need this basics.
If you come to me as a newbie I can teach you and supervise your job, but if you come as a professional developer and you harm my APPs performance because you don't know how browsers work I can become angry.
The newbies I faced those years who simply sit their ass on a college or institute waiting the institution for giving them the knowledge to success are the blind, and this newbies who spent time learning at home apart from their official studies, and learnt how the things work are those one-eyed that can become code snipers on a near than far future.
The conditional path to success
Depending on the country you live in the path to success can be different. On South Europe (I think this could be extrapolated to north europe too) it's hard for a self taught to find a job. This is because you can get an official certificate for free, which takes you two years and it's considered that you are not a valid person for the job if you didn't take the effort on something that is free and that lasts two years and which ensures a basic acknowledgement on some basis. Reasonable, don't you think so?
Here the fastest way is to take an official certificate which ensures a minimum of around 3-4 months of scholarship holder into a company (also you can go and ask for a given company for this, so you have the possibility to start where you want, if the company agrees of course). Most of time you will be able to keep working as junior dev after you finish the official certificate (which on some countries is called first grade)
Then you can get money enough to pay for an online college grade given you'll be earning around 4x to 5x the price of the college grade yearly.
After finishing your grade you'll be a senior developer for sure: a grade lasts 4 years but given you already have an official certificate you can avoid some subjects and do it in 3 years only. Also you can slice your subject count per semester and last more time for getting your grade title if you find you have no time or you want to take it easily.
It's not necessary to take the grade just after finishing your certificate, you also can get experience first and then go for it, or self taught yourself properly for getting treated as architect, analyst, project manager or whatever you want to achieve. If you've an official certificate and you can demonstrate you know something, it's good.
Of course you can go for college grade from te beginning and learn to work with different technologies by your own while learning the grade concepts. If you do this and you can, don't apply for any job while doing this, use your time into know more and practice what you are learning instead and you will become a good professional little time after finishing your studies.
If you live on another country and you can add the situation and the path for becoming a professional developer please, comment it to help another learners and newbies to success :D
Network and visibility
Last thing I want to encourage you is to build a network.
I find interesting 3 tools you must use: LinkedIn, StackOverflow and Dev.to, also it's fine to get a portfolio built by your own and getting a profile on FreeCodeCamp . All things are for free except your portfolio's hosting and domain. Try to build your portfolio following the steps on the linked article when you feel ready to apply for a job. If you specialized on back-end, DB or another branch, there's no need on dealing with that and you can go for a wordpress (which you can one-click install on the hosting I posted on the portfolio article) for example, If you are about front-end, take the full workaroud as it will be your cover letter, and linked on your linkedin profile, where you will receive some job requests from human resources companies.
Thanks for reading and hope this lines can help some of you and hope you achieve success too! :D
Best wishes,
Joel