A checklist for selecting a right first job in programming
There was an interesting discussion on a FB thread by one Krinza, which let me speak about learning and the importance of the first job. Here is a raw version of my thoughts; I feel it is still useful as it resulted in a check list :)
Disclaimer: when I am saying "learning" below. It is learning to become a better programmer. Some of this could be valid to other fancy roles: data scientists, cloud engineers, etc., but for the venture-backed startups, at the top of the tech food chain are the world-class programmers and the immediate future (3-5 years) belongs to them.
So, different people learn in different ways:
- Some learn from existing people. So for many most important thing is who else will be there to mentor or coach us? What are their credentials? What have they delivered?
- Some learn more from the assignments. So for them, the most important is what is the path to becoming an individual contributor in the production code; Can they make mistakes without causing too much problem (good companies have automation in place or peer-reviews that provide good feedback)
- Some learn from reflection. For them, an important thing is: what are the measures in place to reflect on how we are doing, e.g., what we had to change in version 2 and why? What is our code review feedback over a timeline telling us?
- Some learn from peers. Are the best programmers from my class (or who were a year senior) working here? I can probably grow more by working together with them.
- Some learn from diversity. Are their people from different background with different approaches and skills?
The above is not exhaustive and is not mutually exclusive for many. But one can come up with a checklist to see if the place is the right one for them.
Ask some of these, when interviewers or recruiter ask if you have any questions :)
- Do they have a proper version control, e.g., GIT
- Do they have automation? (you can safely do changes in existing code if there is automation)
- Do they check in unit tests alongside code?
- Do they focus on dev experience? Rather than dev setting the dev environment, better companies have Dockers setup that can get someone up to speed in a few hours.
- Do they have more unit tests than integration? Do they have more integration tests than automation? https://martinfowler.com/arti.../practical-test-pyramid.html
- Do they have a formal code review process, e.g., language review, reuse review, code smells, etc.?
- Do they have a focus on documenting software design decisions? https://www.industrialempathy.com/.../design-docs-at-google/
- Do they have a formal training process to get the new joiner up to speed with the tech stack and dev environment?
- Do they have the right dev environment, e.g., dual-screen, plenty of meeting rooms, SSDs on dev machine, plenty of RAM, access to tools such as code profilers, credits to buy Udemy courses, etc.?
- Do they have formal coaching sessions? Where the senior engineer across the teams talk about design decisions, they took in line with the tech strategy, or they speak about various architectural tradeoffs they are taking (e.g., not using microservices because it is a bad idea in our case because of ABC reason)
- Do they incentivize people to write high-quality code?
- Do they have OKRs around professional development?
The above is not an exhaustive checklist, but it should give an idea.
The first job is the most important one IMHO. Your first TL or EM is very important. Your peers are very important. Your contribution to what the team is doing is very important.
The best thing a new joiner can ask for is to get a chance to work with good developers.
Reference: Above list is implicitly inspired from https://www.joelonsoftware.com/2000/08/09/the-joel-test-12-steps-to-better-code/
--------------------------------------------------------------------------------------------------------------
If anyone here wants to work in a world-class engineering environment out of Pakistan, then consider EMPG (Zameen, Olx, Dubizzle, etc.). We have a super focus on writing high-quality code to solve challenging problems. I have also published a preparation list to help applicants do their best in our hiring process https://asim-ghaffar.medium.com/empg-engineering-interview-preparation-guide-756f8b7b0342
--------------------------------------------------------------------------------------------------------------
If students are reading this, then check this out if you are passionate about building a programming career https://asim-ghaffar.medium.com/cs-freshie-have-this-in-your-resume-39532b2fd934