2 years of programming. Results and new goals

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:

  1. 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.
  2. 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.
  3. 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.

4 months on my first web-dev job, growing as a full-stack dev

This time I want to tell about oct 14 2018 – dec 25 2018 period on my first web-dev job.
When I wrote about my first 2 months, I told that my work was focused mostly on tasks that required some front-end skills, React + CSS.
Those 2 months changed it a bit, I started to work a lot with a back-end, as I desired before, but I still have front-end tasks from time to time. For example I implemented new landing page for Wizer project landing link, this time It took me about 2-3 days overall, much more faster than before.
Also I worked a lot with Redux (sagas mostly), a lot of tasks required knowledge of it.
Those 2 last months I worked on Wizer + Tabnex projects. On Wizer we use Firebase + React. There were mostly front-end tasks with some Firebase (for example, I implemented the departments logic). So tasks became much more challenging as I wanted.

As for Tabnex – I started to work a lot with a node.js + mongodb + DynamoDB.
Also I work with Enrichment API sub-project of Tabnex it built with Python (Django framework). So now I have opportunity to learn Python as well.

Last month was focused on back-end mostly (python + node.js) and I like it. Now I can say that I’m a full-stack developer and I’m happy that I invested my time in some courses that had back-end in it. It was very good to have this knowledge when I started to work on those tasks that required nodejs/mongodb understanding.

So all goes pretty good for me.

But I still feel I can be more productive and have to change something.
I stopped practicing algorithms – due to lack of time. The thing is I work about 40-46 hours a week (5-6 days. And there was so much thing to learn – I mean there’is no routing, I constantly learn something new – and it requires a lot of focus and time. Those 2 months it were AWS, Django, Node.js, MongoDB, Firebase, sagas, cron, Greenhouse API, Wistia API and etc, a lot of new technologies or technologies that I knew already, but haven’t practiced for a long time.

And If I start to spend Sat + Sun learning some algorithms – I don’t know. I still almost don’t go out on weekends (I mean social life) – so it’s a bad idea. And as for weekdays – I’m to busy working on my job projects.
I know I should practice algorithms and I have a real big list of book to read, but my eyes get very tired throughout whole week and I can’t find energy to spend some time for none-job learning. And it’s a bad thing.

Still wondering how people work about 60-80 hrs a week. I can do 50 as maximum when I almost constantly sit home.

So it’s an issue that I should solve, because those algorithms is a part of every interview and I should always be in a good shape.

My first 2 months as front-end developer

I described my 1st month in the previous post. So it’s time for the 2nd one.

This month I mostly worked on Space Step landing page (React) + Wiser (React + Redux + Material UI).

Space step is just a landing page, but there is some challenge with it (UFO movement). Current version is here (for now desktops only).

So my react skills + CSS advance pretty fast. I haven’t worked a lot with Redux, most of my work (tasks) included React + HTML + CSS. Of course projects themselves include Redux, but I had to only read code and slightly modify it.

Also Wiser project I mentioned uses Firebase – good thing to learn + Wistia video hosting API.

Also about Tabnex landing page I mentioned in the previous post – now current version is hosted – it’s here. The landing is ready – only slight modification left to implement. I built the landing page that is on tabnex.com + https://tabnex.com/talent-enrichment (2nd landing page). Plus I worked on main application itself (not much, but still, completed 4-7 tasks).

Work itself is pretty interesting – tasks become more challenging. Also my hourly rate has grown slightly – and it feels good 🙂

I hope soon I will have a chance to work more with Redux + some back-end related tasks that include node.js (I already completed some tasks that included Firebase).

As for weekends I still cant find time to practice some extra coding. Usually I do 43 hrs a week – and that’s it. I should do something about it.

Also I want to learn some additional but very useful topics: SEO, security, hosting / auto-deployments, payments systems.

Plus React Native is a very hot thing. Mb I should also learn it on my extra time.

Got a job (remote as junior), getting commercial development experience.

So my last post was on the 5th of August and I mentioned that I was starting to looking for job. And and in about a week I got one.

So my decisions to complete data-visualization certification on FreeCodeCamp + participate in Chingu Cohort were absolutely right, I boost my self-confidence while implementing those projects, I learned React + Redux basics and it helped me a lot landing a first webdev job. Thank you FreeCodeCamp, thank you Chingu! 🙂

So. Now I’m a junior front-end developer and I work remotely. My first day was on the 15th of August. I found a job through Upwork (long term). I’m very happy that now I’m part of a team. Yes, it’s very small, but still, it’s crucial to have more mature developers working with you that can help you in some cases with little advises. I was afraid that remote work (freelancing) is all about working alone and building small projects, but fortunately I was able to find a team that was glad to invite a junior developer to join them. Yes, compensation is very small, but still, it’s all about getting experience for now, real commercial experience that I needed so badly, that I was thirsty for.

Yes, it’s not full-stack development for now, I’m a front-end. But I think it’s actually a good thing for me right now. I was a jack of all technologies. And now I’m focusing on React + Redux and CSS, later I think I will be able also to take tasks that require some back-end skills. But for now, I have to focus on React + Redux + CSS and master it.

I’ve been working about a month for now and I already participated in 3 projects. First one is a landing page with React + Contenful API + CSS (from psd to html + animations) for some Canada startup, the whole project was implemented by me (I’m still working on it). And two others are web application built with React + Redux (Sagas), I completed some tasks, but nothing serious, mostly trivial React coding + CSS.

Sometimes I have opportunity to speak with our clients / designers directly, in English, and I enjoy it. Also we have code reviews and other developers give me little helpful advises every time. I feel that I motivated now, that I’m progressing faster than alone. And I enjoy programming much more than before, when I was working all alone on educational projects. And those real-world project are boosting my self-confidence so much. I feel that I’m able to complete tasks (in Jira, we have sprints), successfully complete them. Yes, most of them are pretty easy and straightforward, but still it makes me happy and finally, I feel that I make a difference!

For now I work about 40-43 hrs each week. Usually I work 6-7 hrs a day, so it takes me 6 days (normally) to make those 40hrs. I know that I should spend some extra time on side projects  + algorithms + make some useful programming posts (little guides). It should take about 5-10 extra hours. But for now It’s hard for me. Really hard. Even those 40 hrs (they all real productive) takes me 6 days to complete them. And I should do 45-50 hrs with this extra work I mentioned before. So I will try to figure it out, how to achieve it, to have 50 productive hrs each week and have some decent social life. Those 5-10 extra hours are pretty important to become a great developer… So I should figure it out.

So… It’s been a YEAR! Results and goals.

So it’s almost been a year since I started to learn programming. The first post was on the 8th of August 2017.

Wow, I should say, that this year passed so quickly. Seems like the older your get, the faster time passes. Now I’m 25.

Last year I didn’t set a clear goal. I just started to learn programming and didn’t know about my options. I just took OSSU path. And now I think it was a right choice.

I completed following courses from this curriculum:

  1. CS50 August 2017
  2. MIT 6.00.1X September  2017
  3. How to Code: Simple Data September  2017
  4. How to Code: Complex Data September  2017
  5. Software Construction: Data Abstraction October  2017
  6. Programming Languages, Part A October  2017
  7. Programming Languages, Part B October  2017
  8. Programming Languages, Part C October  2017
  9. Front-End Web UI Frameworks and Tools: Bootstrap 4 November  2017
  10. Front-End JavaScript Frameworks: Angular November  2017
  11. Multiplatform Mobile App Development with Web Technologies: Ionic and Cordova November  2017
  12. Server-side Development with NodeJS, Express and MongoDB December  2017
  13. Algorithms: Design and Analysis Part 1 January  2018
  14. Algorithms: Design and Analysis: Part 2 February  2018

When I completed Programming Languages course in October, I felt that I was getting too much theoretical information. And I wasn’t even sure that I would need it later in my career. Or even If I would need it, I thought I would completely forgotten it when the time comes.

It was a good time to think about my future specialization. So I thought carefully and decided to chose Web Development path. And I picked that specialization and started MEAN stack courses. After all those courses I took, it was not so hard to finish all of them.

As a result of those MEAN stack courses was my personal project. ActivityTimer. I created web  and mobile applications (November-December 2017) and I still use it every day.

After this project I decided to took algorithms course from Stanford University (January – February 2018). The most challenging course I took. But again, it was full of theory, but I had no projects to apply this theory. And I already wanted to start working. But I had no decent portfolio and didn’t feel that I’m ready.

And then on some Quora answer I noticed a FreeCodeCamp (February 2018) . I thought it was a great place to dive deeper into Web Development and create my portfolio. And I decided to earn all the certificates (front-end, back-end, data-visualization). And it took me exactly 3 months.

A had a lot of hands-on experience and projects after FreeCodeCamp, but the quality of my projects was low, because I tried to get those certificates as fast as I could. I fulfilled all the users stories, but my code wasn’t refactored / design was poor. And at that time, I tired to work alone with no team. I was eager to take part in some collaborative project.

On some freeCodeCamp forum post I noticed messages about Chingu Cohort (May – July 2018). And I decided to take part into Chingu Voyage 5 (May – July 2018). That’s where I learned React and Redux. And the result of it was AutoApplet project.

After Chingu (end of July – August 2018), I felt that I’m ready to get a job. And the choice was between going to Moscow and starting freelancing / remote career. I decided to chose the 2nd option.

I want to find a remote position for junior  full stack  JavaScript developer (MERN / MEAN stacks) or even front-end React position just to get in. But I still feel that my portfolio is weak. I have only one React + Redux project and many MEAN stacks projects that not refactored / have poor design.

My current goal for next 1-2 months is to improve my portfolio projects / create my own personal website with React, prepare myself for interviews. Get good enough to get a job. I think I should focus on React + Redux. Because it’s easier to find a remote front-end position with a good team.

My goal for this year is to gain commercial development experience and progress to the middle front-end / full-stack developer. It would be nice to accomplish it while being a part of experienced team. In this case I would progress and learn much more faster.

Chingu Voyage-5 finished. Choosing right path for my career.

So it’s been a week since I stopped to work on Chingu project. And I should say, that MVP is not completed, at least  the way we wanted it in the first place, it has low functionality. There are several reasons for it:

  • we worked only as 2
  • Facebook, Instagram and Gmail APIs are too limited for educational project, so we couldn’t use their webhooks
  • lack of motivation

But still, we submitted project. This is our git repo. And this is hosted version on heroku.

Basically there are some Twitter/GitHub triggers and trello / gmail / slack actions. Triggers are webhooks that listen for user’s updates. And whenever some  particular event  (that user chose) appeared, action ( that user also chose) is fired. And actions are just simple API calls. For example, sending email to particular user, sending message through slack to particular user and etc. User can chose and set up trigger and action himself, and application will listen for that particular trigger and perform  that particular action automatically.

Those are some functionalities:

  • If you install our app to your git repos, you can receive messages on slack / get email / post card to your Trello board, whenever new issue in your repos appears.
  • Whenever you post twit / post twit with some particular hashtag  / new user starts to follow you,  you receive messages (updates) on slack / get email / post card to your Trello board.

Project was pretty challenging. But I knew, no one is gonna use this project and because of it lack of motivation appeared. Anyway, I learned a lot from this project. Especially Redux and API integrations, webhooks. It was a great experience.

So at this point. I should choose right path for my career between: freelancing (mb try to find remote job) and moving to Moscow and joining some company with a good team. I already thinking a week about it. And this is hard decision. I read some many articles and comments, there are so many opinions.

But. A lot of people say, that junior dev evolves faster in good team, in a good in-house team, where senior developers can help him in office. Also, there are a lot of good practices and processes that are well established in office jobs, plus projects are big and interesting. And when freelancing you work alone, on small project, no one gonna help you and even review your code. And when people looking for developers for remote job, they don’t want see junior devs, they mostly want at least middle or even senior devs.

But I don’t want to move to Moscow and freelancing / remote jobs offer communication that is fully in English (international clients / companies). So it’s very hard decision for me and  I should think very carefully.

IFTTT clone, learning Redux + React

So it’s been a month, since voyage started. And unfortunately all this time we work on the project as 2. The 3rd member left voyage right from the start.

I’m disappointed with Chingu flow because of it. I think they should have assign at least 5 members for each team. Because it’s very naturally when 1-2 members leave voyage. And in my opinion, team should have at least 3 active members, so all participants can learn how to proper split work and communicate as a team, learn git flow. When there’s only 2 members, you don’t feel that you work in team. Communication and task splitting are  too easy, you don’t learn git flow.

But still, working as 2 is much more interesting, than working alone. It motivates you to produce higher quality code and work more efficiently to meet deadlines.

Our goal is to copy IFTTT site, that provides different integrations between services. For example, when you have new issue in Github, it automatically add card to Trello board.

This is our git repo.

So far I was responsible for

  1. header
  2. social sign in page
  3. sign in/up with password
  4. profile settings page
  5. change password page
  6. account deletion page
  7. authentication (back-end + front-end)
  8. all express routes for pages above
  9. slack +  mail intergration

So now we’re fully focused on integration between services. We completed simple  slack and Gmail integration (user is able to send both email and  slack message) with button click.

This month I learned React + Redux. I used React before, but only for very small FCC projects. And now I got enough practice, working on SPA. Plus I learned Redux from scratch and now I know how it works.  Also I learned Material UI for React. After Angular,  it wasn’t all new, was pretty easy to learn all those things. Redux was only one challenging thing, I never used global state and learning Redux for pretty big project from scratch is not very easy task.  But still, I enjoy challenges. I used Redux official guide, it’s super useful. And they provide a lot of examples on git repo – the most efficient way to learn for me.

Also I revisited authentication topic I was familiar before, but now I know it even better. Main part are access and refresh tokens, because we will use them all the time for integrations between services, they provide ability to act on user’s behalf.

Beside this project I started to practice algorithms little by little, trying to do it every day. After this project (deadline is in month, on 20th of July) I should focus on job seeking and remaking my portfolio key projects. In august it will be a year, since I started to learn programming and I think I have enough expertise to join some company / start freelance career.

Chingu Voyage-5

So recently Chingu Voyage 5 started. I’m in  bear-team-25. I’m very excited about this.

I already met teammates, they have impressive background, one of them has 6 years experience, another one has been already participated in 3 voyages before. So both of them are very experienced.

So for now we decided to use MERN stack for our project. And the project itself will be the re-implementation of IFTTT, We haven’t discussed desired functionality yet. This project will be focused mainly on back-end, especially on different API integrating, so a lot of API documentation reading incoming 🙂

So I never had a chance to work in a team before. And currently I’m learning how to use GIT in collaborative development. Those are some very useful resourses to learn how to use git when you’re in a team:

  1. Articles part1, part2, part3
  2. How to Write a Git Commit Message
  3. Introduction to Git – Branching and Merging.
  4. Introduction to Git – Remotes
  5. Git Tutorial

Also we decided to learn TDD for MERN stack, I should do some research about good tools for testing. I never used TDD for web-development, but  I think it’s very valuable skill to learn.

And I don’t know Redux at all, gonna learn it and improve my knowledge of React. I will also try to reimplement my React FCC projects  with React + Redux, I never used Redux.

So this Chingu Cohort gets me excited very much, before it,  I felt exhausted, but now I’m full of energy and thirst for new skills.  When you see other people like you, programmers, from other countries, work hard,  learn new things everyday, solving problems, It helps you to stay hungry for new knowledge and skills. You understand and see that you’re not alone that taking this path. Great community!

I don’t have much experience as my teammates, but I have a desire to learn. And the fact, that they’re more experienced makes me to learn new things as fast as possible. And I love this feeling! Teamwork >> working alone, I should remember it and try to search  collaborative projects. It helps stay excited and makes learning of new things very fast.

completed all FreeCodeCamp projects, got all certificates

Today I finally completed all the FreeCodeCamp projects. It took me much more time, than I expected. I started working on them on the 15th of February and completed all the projects only today, on the 15th of May. So it took me exactly 3 months. My FCC acc. 

Plus those projects are very raw, code not optimized and not even refactored, design is poor. I thought it would take me about 1-1.5 months, because I knew almost all technologies beside React/d3. But each project had some challenges and something new for me, even if I was familiar with most technologies. By the way I learned some React, but to be honest, I used anti-patterns to complete projects as fast as possible and didn’t learn Redux, I just used JQuery instead of it.

Chingu Voyage-5 should start soon, today I received invite to Slack workspace. Soon teams should be created and projects assigned.

So for now, I’m gonna optimize and refactor some of my FCC projects and after that may be they will be worth to be mentioned on my portfolio.

cert

React, Data Visualization Certification

Ok. I decided to learn React, 1 more framework (library) for me. Seems like React is more popular than Angular and it’s better for small projects and freelance work. I think it will be a very useful tool in my tool belt. And React Native is very-very good for mobile app development,  better and more popular than Ionic I guess.

Also it’s easier to find a team of beginners  to build a project with React. For example Chingu, they primarily use React as I understand and FreeCodeCamp also promotes React. So why not to learn it, especially when people say that’s learning curve is not so steep as in Angular. And Angular doesn’t seem very hard for me.

So now I’m taking basic intro React courses provided by CodeCademy. After that I’m going to start implementing Data Visualization FreeCodeCamp React projects. And then D3 projects. After all of it, I’m going to find a team to build some projects with MEAN/MERN stack for my portfolio and also improve my already completed projects.