So… 2 years of programming!
Those 2 years past sooo quickly.
2 years ago I decided to change my career and become a professional programmer. From scratch using only free Internet resources . I was 24 already and the idea was to achieve my goals as fast as possible. I didn’t have clear goals at that time. But I was eager to learn and progress very quickly. I wanted to catch up with peers, that had specialized education. And I still want it.
I completed a lot of courses that year, and finally succeed. I had my first job after one year of learning.
So now it’s a year, since I started to work as a programmer (2 since I started to learn). This year I gained enormous coding experience, worked on many projects, grew as full stack developer. But I still don’t consider myself as a professional programmer. Still have a lot to learn, a lot to achieve. But I feel that I stay steady on my feet, have pretty good experience and always will be able to find a job. And that feels good.
When I started to write this blog, I had a lot of free time. Plus I had things to share, to show how can a man with 0 experience in programming, from scratch, can become a professional programmer or at least find a coding job. I would say, that a primary goal was achieved a year ago, when I started to work as a programmer. After that I started to post less and less. Because I don’t think that people would be interested in what technologies I’m learning, what projects I’m working on and etc. Plus after that moment I had very small amount of a free time. Because I had and still have a full-time remote job (40 hours a week).
So. The last year goal was to gain a commercial development experience and and progress to the middle front-end / full-stack developer, when being a part of experienced team. I think the goal is achieved. Not sure about middle full-stack developer, because It’s hard to determine. In different companies it can vary. But I had almost a whole year of full-stack development. I started as front-end only, but mostly this year, I worked as full stack, React + Node.js with brief experience with Django. Mostly I was isolated or worked with 1-2 developers. Worked on a small projects. But it was a great opportunity to learn, to have some mistakes and learn from it. Because of small team / projects.
I switched to Ubuntu from Windows and learned some basics of it. I learned some devops, deployment with Jenkins (automated and continuous deployments), managing server, Nginx, managing domains and sub domains. Learned basics of no SQL databases (firebase, DynamoDB, MongoDB), how to optimize queries and how to better organize database itself.
Learned some basics stuff about AWS, Google Cloud Platform (Compute Engine, firestore, IAM, Big Query, Cloud tasks), learned how to parse sites, that have login system (linked in) with Selenium and chrome driver. Learned how single-sign-on works and implemented it using OpenId Connect (Microsoft Office 365). Learned React Hooks. Investigated how to use Amazon Fresh and Walmart API for food (ingredients) delivery system. Learned how emails work, learned Sengrid API, custom SMTP. Different tools as Sentry, Sendgrid, Fullstory. Did endless amount of PSD to html with pure css / Material UI.
A lot of different stuff. I’m 100% sure that I missed here a lot of things that a learned. That the downsides of that I don’t write posts anymore on a regular basis. Hard to remember that I did all this time. I should find all this stuff in Worksnapps at least and write down.
The things that I should think about:
- Time management – I only do my 40 hours a week, but I’m absolutely sure, I should find time and invest it to learn something outside that full-time job. For example algorithms and some other important for programmer things as pet projects with some new technologies. But I definitely should invest time very careful, only on topics that I need right now, because there’s no sense to learn things for the future. I will simply forget them. Last 3 month it went out of control. I literally do only 40 week and have some social life on Saturday / Sunday. No additional reading and educating myself. I definitely should fix it. To always stay sharp. Invest some time in algorithms and coding challenges.
- Reports on what I worked on, what’s my experience and what I achieved – The thing is, when writing this particular blog post, I find out it’s very hard to remember that I worked on all this year. Particular last 8 months (all this period I haven’t written a single post). Mb I can find it out looking in Jira or git history / worksnapps. But… It’s very time consuming and not accurate. And I need those facts for my resume. To describe what I worked on, what I achieved. What’s my experience. I think on a weekly / monthly basis, I should create a report for myself.
- Software architecture. The more I work, the more I interested in software architecture. Want to become an architect one day. And I know to achieve it, I should work hard. This year I mostly worked as a simple coder. Worked on tasks that had strict acceptance criteria. But also I have pretty big amount tasks that included investigations / some type of software architecture work like picking tools for development, implementing all the logic and database structure. Those are pros of small projects with small team. It’s challenging and interesting. The harder work, the more exciting it’s for me. So I should think more, how to grow as a architect, even if my daily work doesn’t provided it.
So this year I worked on many projects. Startups. And now, I switched to only one. It’s also startup, but it’s a project on which we’re working as team of 5 (3 devs, designer and QA). During the year I implemented a lot of things for this project: department system, landing page, custom SMTP, phishing quiz, reminders system for signups and reminders for campaign progress for users, single sign-on. The project name is Wizer. For now, all the team switched to this project. And this project promises to be very successful.
And that means, that I will learn a lot from this project. We already hit some scaling problems and I’m working on some improvements using Google Cloud tasks. Database modeling is very important too. Testing. For now I’m not very experienced in testing and this will require very thoughtful testing system. Because logic is not so trivial and a lot of bugs occur. All of this will teach me how to scale system, how to build very stable software. Mb I won’t learn as many things as last year, but new knowledge will be very useful.
Goals for this year. This year I want to develop deep knowledge not only in coding, but in software architecture. I want to understand how to build scalable, optimized and very stable system that can work good with thousands active users, learn data-modeling. Learn how to test all the system. I know automated testing is very important thing. Want to invest some time and learn SQL databases. Because for now I primarily worked with NoSQL databases.
That’s again, not very clear goals. Because it’s hard to determine how deep should be my knowledge of those topics. But those topics are very important for my career and I should focus on them. Because coding is good (clear code, using right algorithms, bug free and etc) , but to be a very successful software engineer and engineer that in demand, you should do stuff, that most people not good at. The harder job you do, the more valuable you are. And to obtain those qualities, I should read books, do a lot of research on existing and successful software, understand how it was designed.
And may be I should start to post some technical posts. Because I face a lot of problems every week. I can share solutions here. I know it will be more popular that my usual posts about me. Because I have a single technical post, and it’s the most readable one. But not sure If I will find time for it.