Getting ready for your first software engineering job can be daunting.
Developers are in demand, but gaining the minimum skill set for becoming competitive usually takes 2-3 years. The first job or two as an engineer could be quite challenging to land.
The two most important things you need to understand first are:
- Your job cannot teach you everything. Learning through pet projects and continuous reading and practice is extremely important – especially over the first 5–8 years.
- Programming is a craft that relies on hundreds of parallel activities – understanding computer architectures, algorithms, data structures, networks, different programming languages and paradigms, effective testing and deployment procedures, identifying and utilizing the right components and libraries, following the latest programming trends and more.
With that in mind, here is what will gradually improve your programming skills over the years.
1. Diligence And Attention At Work
Starting in an organization is not all about programming. It’s about working in a team, reporting to management, resolving bugs, understanding business requirements, following deadlines, producing high-quality code.
All of those skills are important, if not mandatory for every programmer out there. The more you excel at programming, the more likely it is that you work in a team.
Great programmers generally work on high-profile projects with hundreds of other developers, team leaders, managers, DevOps staff – and even people in marketing, product management, sales. In addition to improving on the technical end, your culture would determine your success as a team player.
2. Collaboration And Learning From Other Engineers
Unless you start with freelancing, you will be exposed to an established organization. You’ll work with other developers – hopefully alongside some senior software engineers and software architects.
Following their work, reading their commit logs, interacting with them would be an educational journey. Learning from more experienced developers would inevitably teach you some best practices.
It’s much better to be the least experienced developer in a team than the best one. Once you reach the top, look for an opportunity to grow further by working in a team with other excellent developers.
3. Code, Test, Ship, Iterate
Needless to say, practical programming is the best teacher.
You can read a lot about every technical stack. Only when you start building something on your own do you realize how much more there is in building an application.
You may encounter missing dependencies, merge conflicts, additional arguments required for a web or database server. Additional security rules that you need to whitelist. Extra validation rules required for a form submission.
The list goes on – especially when we account for different operating systems, browsers, devices – or even Internet providers.
On top of that, many young developers are afraid of experimenting. A project may seem overwhelming, complex, frightening. This prevents them from moving forward which limits their progress.
Small and quick iterations, sandbox environments, version control make the process seamless and safe. The more you overcome that fear of failure, the more you will advance as a software engineer.
4. Join A Community
Communities are a source of progress and growth.
- Your team works on a limited set of projects.
- There are just a handful of people in the technical department.
- You utilize a few technologies known by the technical staff.
- Internal processes define the “best practices” in the organization.
Broadening your horizon requires different opinions and experience in different situations.
Joining a community will allow you to meet diverse groups of people – consultants and freelancers, small agency owners, developers in mid-sized and enterprise organizations working on various technical projects.
Especially if you attend meetups and conferences discussing case studies, new libraries, business problems dealing with clients, and more.
Bonus points for joining an open-source community as a committer. Submitting patches to widely used software can teach you a ton.
5. Read Extensively
Open Amazon and buy yourself “Clean Code”, “The Pragmatic Programmer”, “The Gang of Four”, “Software Craftsmanship”, “Domain-Driven Design”, “Refactoring to Patterns”, “Software Architecture in Practice”, “Test-Driven Development”, “Continuous Delivery”, “Code Complete”, among other reputable books for software engineering.
Allocate some time weekly to reading and studying.
Follow relevant tech blogs and community portals like DZone, Hacker News, Slashdot, blogs discussing performance, scalability, security – and everything else tailored to your favorite tech stack.
Follow technical experts on Quora discussing different technologies – pros and cons, applications of specific programming languages in different situations, caveats when using certain tools.
6. Join Or Start A Geek Club at Work
If your colleagues organize workshops or spend time on HackerRank or Stack Overflow, join them.
Otherwise, organize some workshops yourself and invite them to join. Ask them to pick a topic they know and present it to others.
Building a “geek club” at work would be a great way to bond with your tech colleagues and collaborate on other types of projects while studying.
7. Work On Pet Projects
Start a project of your own. You can pair up with a friend or two.
Building a new solution from scratch would let you see the entire process from the get-go, make strategic architectural decisions, launch a product and respond to customer feedback (and odd edge cases).
Plus, you can experiment with new platforms, frameworks, programming languages.
The easiest way is building a platform that you’d use yourself – a simple project management system or a time tracking software would do for starters. Later on, you can build something more meaningful and feature-rich that could be scaled in a cloud environment.
I created a video on the skills that you need for your ideal software engineering job. Check out the video below:
What Projects Are Good For Beginner Programmers?
My personal preference when teaching beginner programmers is working on a large solution that covers most aspects of building a complete application.
It doesn’t need to get too much “in-depth”. Touching on different points and building a minimum viable product of sort has worked best for us to date.
That depends on the technical stack so I’ll share my experience.
My Experience As a Java Trainee
In 2006, I had enrolled in a formal Java training program. I had some practical experience already in certain areas and building smaller projects.
We’ve started with the Java programming language foundations. We went through conditional statements, loops, arrays, Strings (being instrumental), methods, classes, OOP paradigms, exception handling, and file management. The next steps were collections and libraries that were commonly used (such as the java.util packages or the java.io classes), the complexity of algorithms, dates and locales, advanced data management and I/O, multi-threaded applications.
The course took 350 hours + 250 hours in homework assignments and lab exercises. It covered desktop applications (Swing), network programming (sockets), basic web programming (JSPs and servlets, some JSF), databases (creating schemas from scratch, SQL, Oracle, some PL/SQL). We went through some intermediate sessions discussing reflection and serialization, ORMs (Hibernate), basic web design (HTML/CSS/JS), source control systems and general unit testing.
Practice Engineering Project
At the end of the training, we had a final exam covering the full spectrum taught during the training. It was held on-site and took place over a whole weekend – 16 hours.
My assignment was building a complete car dealership platform from scratch:
- Building a framework for managing a shop, available cars, owners, partners
- Creating a database schema for handling all data
- Implementing an ORM layer that handled transactions through Java
- Building a web system for submitting new vehicles with their corresponding data, creating partner and car owner accounts – with user management, access control lists, different archives and such
- Crafting an in-house desktop application for moderation (replicating part of the web platform) – talking with the same database
My complete application was ready by Sunday afternoon. 90% of my group peers managed to get the work done in time as well.
- Was it production-ready? Not at all.
- Was it handling the basic operations? Sure.
- Was it an excellent exercise that touched on plenty of points that I kept implementing at work? Absolutely.
Stepping In As a Technical Engineering Trainer
Later on, I joined the training team and was a seasoned trainer in several private academies and local universities. My curriculum was similar to the one taught by this training company and dozens of my trainees are now tech leads, senior architects, technical project managers at SAP, VMware, Oracle, and a number of reputable organizations specializing in professional programming.
Sure, my programming career required continuous learning and the ongoing improvement in order to get a better understanding of how those components worked together. But the initial kick-off project was fairly complete and required a good understanding of all underlying layers – as well as building an entire solution implementing them in practice.
Therefore, my suggestion is starting with a project that covers all areas that a developer would be interested in specializing at. You don’t have to create a database schema with 200 tables – create 10 and implement all normalization layers accordingly. Don’t build an award-winning web application – start with some basic screens and general authentication. Don’t start with transactions and logging – make sure that the key features work and components are connected as expected.
Just don’t stress on one particular niche skill without including all relevant areas that are required as a programmer.
How To Finally Land a Software Engineering Job?
Leadership skills are rarely important — unless the company has a steady career plan and plans to promote you to a team lead role within the next couple of years.
This isn’t quite the case in most large corporations employing thousands of people. The process is often slower, and leadership doesn’t rank in top 3. For startups, it matters (in the event of a rapidly growing one), but again — it isn’t a key decision.
For a pure development role, companies look for a combination of “coding skills” and experience building high-scale, complex platforms. This can be assessed in different ways — portfolio, the background of your previous companies, the interview process itself. Open-source contributions are valued in high-tech companies.
The interview process often tries to gauge other traits unrelated to writing code itself. Some are problem analysis and design cases. Multitasking can also be a factor (or being a fast thinker). A firm grasp on new technologies. The ability to learn new frameworks or libraries in a shorter period of time. Experience working within teams. Conflict resolutions.
Basically, areas that determine whether you’re a good culture fit or not. This is especially important when you work as a part of a team — you shouldn’t lag behind your co-workers and need an attitude of a team player, not an A-rockstar who works solo.