📜 ⬆️ ⬇️

How I started writing third-party projects to gain experience


(As people asked: Sublime Text 3 with Spacegray Light ("platinum-gray light") from Materialize and Ubuntu Mono Bold headset)

Like most of the other computer science students at the University of California at San Diego, for several years I was just going back and forth through various courses. I have never been either good or bad in my grades , and my average score was “not very”. I loved programming courses with their extremely difficult tasks; I didn’t like mathematical analysis.

In this non-technical post, I would like (for a change) to share my experience with open source projects. These projects have given me tremendous help in the future in obtaining a place for an internship (including Amazon, which later turned into a permanent job).
')
If you are currently studying computer science or are planning to do it, then I hope that my experience will be useful to you.
NOTE: this post became very popular after I posted it in several sub-forums on reddit.com. There have been some interesting discussions on / r / compsci , / r / cscareerquestions and / r / programming , which may attract you.

Hands-on experience please


Only after almost three years at university, I realized that there is a gap between computer science (computer science, in a broad sense), on the one hand, and practical programming and software development, on the other hand. I did not know this at first .

Over time, I began to miss the lectures on practical programming in my computer science course. I was passively waiting for me to be taught such things as web design and mobile application development. The fact that I could not translate all the accumulated knowledge of software in the simplest of ideas, caused the strongest dissatisfaction.

I also saw various discussions on this topic on / r / cscareerquestions (career subreddite), which made me think of many students who feel the same about the lack of university courses in practical computer science. Over time, I realized that learning was specifically designed to teach us to think from the perspective of problems and solutions, rather than revolve around programming languages ​​and software architecture.

Looking back, I see that I did not understand well enough how projects “for the soul” could expand my prospects for getting a job. From conversations on this topic on campus and from blogs of various employees, I learned that having third-party projects may unexpectedly help in finding work. Among students, it was rather intensively discussed how a portfolio of third-party projects can eliminate the need for a decent average score on graduation. My attitude towards this was rather skeptical.

The first steps


In the summer holidays after my second year of study, I finally decided to try myself in business. That was when I ventured into the world of open source software. However, I attached too much importance to the knowledge of several programming languages. This feeling changed over time, but it was useful. By the time I was working with Java, C and C ++ in training course projects. I already tried to work a bit with Python on Codecademy and on a simple bot project for the social news site Reddit .

I decided to learn on my own several programming languages ​​during the summer holidays so that my resume would look more solid.

I focused on javascript, python and a bit on php. I am glad that I kept my dreams within certain limits and worked on small projects. I made safcat , x-poster and RecoverTabs — all of these are extensions for Safari that have satisfied some of my desires. RecoverTabs was the first my project to be known on GitHub; He added the Cmd + Shift + T feature to Safari, which is bundled with all other browsers, while Safari comes with incomplete functionality.

After some hesitation, I decided to study the development of websites myself. I wrote my personal site from scratch (not this one). I didn’t know the UI frameworks, such as the famous Bootstrap, so I rushed forward and did something suitable from nothing that turned out to be an exceptionally satisfactory product, ultimately.

Since at first I did not have clarity in this direction, my web development experience inherited a surprisingly large amount of concrete practice, even as a server specialist. It is always good to be exactly that person who, as it turns out, knows the user interface, while no one else even wants to touch him. In the end, it pushed me onto the path of developing web programs (server applications) both professionally and as a hobby, as opposed to developing mobile applications and other things.

Even after I dealt with many other areas, web development remains one of my main hobbies: it allows me to relax very effectively.

It seems to me that web development is one of the easiest ways to build a portfolio of third-party (parallel) projects for a student who wants to somehow start a career. This is due to the fact that the software components of web development is much simpler than the user interfaces of mobile applications, built on other principles. Web development gives you immediate feedback when working, which is very encouraging while you are new to it.

Year of projects


After the holidays I continued to work on projects that had fascinated me.

After gaining experience with the user interface, I focused more on server structures, such as Express.js and Flask, believing that if I had a good idea, I should not depend on anyone when designing the user interface. I should be able to complete the product and withdraw it completely on my own.

Now, when it went, I started working obsessively. I made the Node.js API adapter , a desktop utility that uses NW.js , and even developed a CSS theme for Subreddit , which I moderated.

In the third year of university, I spent hours working on third-party (parallel) projects simply because I was interested. Often it took time not only from entertainment, but also from university studies. But, looking back, I do not regret it at all.

The experience gained from my personal projects was invaluable. No university course could replace it.

Now that I had a brilliant (and growing) portfolio on GitHub, I joined an internship at Learning Equality , a non-profit software development organization based on the campus of the University of California, San Diego. This internship gave me the first experience of software design in the "real world". I remember that my interviewer called me a “strong candidate” during our first short meeting.

At that time, I turned to all places in search of a summer internship. For a while I was rather nervous, believing that I could not find anything worthwhile because of my far from the best average score (2.96). After telephone and online conversations with many companies, I was invited to an interview with Amazon that took place on the campus of the university. I did not expect anything special from this meeting, but I was met, interviewed and, ultimately, got a job.

This internship at Amazon turned into permanent employment later after graduation (I graduated with an average score of 3.07). I was delighted.

And even after receiving an internship at Amazon, I continued to engage in a business that had fascinated me. The most memorable was the development of Quibbler .

A good portfolio of projects can only help you in the future.

Novice traps


Now I will allow myself to point out a few common mistakes that those who start their own projects make. Some of the provisions may seem controversial, but they represent just my opinion, formed from both experience and personal observations. Feel free to take it critically, as my experience cannot be applied to everyone universally.

Develop open source software


When I have some idea of ​​a project, then I do some planning, which includes the following steps:

1. Search for best practices for my chosen language / platform;
2. Choosing the right data structure for this work;
3. Planning deployment and update mechanisms.

All this has more to do with the fact that “around” programming than to programming itself. Your university courses may not have focused your attention on how your software will need to be deployed or distributed, and then maintained through updates.

Working on a project, it is very useful to plan these activities in advance. Think about how your web application will work on the server or how your program will receive updates and how you will deliver them. All this will help with the implementation itself. Since the schedule of work will not put pressure on you, you will be able to spend as much time as is required to use the most optimal methods. Lack of reasonableness of the structure of the future system is a bad choice.

Writing open source software also means writing code that:

1. Present in the repository on the Internet with sufficient documentation;
2. Can be read, interpreted and improved by other programmers;
3. You are not ashamed to put on the Internet.

This is a great way to teach yourself to good programming skills. Real software design is not easy and not just programming.

In addition, it is useful to show your code to potential employers.

Start small


Do not be afraid that your projects seem too small or insignificant. List them all in your portfolio anyway.

Moreover, I suggest intentionally choosing small projects. The smaller the project, the easier it is to complete and maintain. Focus on what you need to acquire specific knowledge. Do not start your project next big social network. Some ideas do not look as difficult as they really are.

Getting started with javascript? Make a browser extension. Would you like to try with Python? Make a small command line utility and publish it . Sometimes it even becomes a problem.

Special advice for beginners: fill your portfolio with absolutely small projects (do not be discouraged by this). You will soon feel what is achievable for you (without undue effort) and what is not.

Try to act alone


Do not focus on start-up projects just because you do not have people to work together.

Although cooperation on third-party projects can be useful, I almost always did such projects myself. Independent software architecture development, debugging, and problem solving are incredibly useful.

When choosing partners, consider their skill, skills and motivation. If you have like-minded people, then go for it! Otherwise, you can face laziness. Third-party projects, in themselves, are already working overtime. Such a project is difficult to start. Everyone will try to shift the heavy work to others. Much time will be lost waiting for others to finish their little pieces of work. Team members with more experience will be forced to stop, which is a waste of precious time.

Working alone means that you can plan the time allotted for this activity. Since you have no one to take part of your workload from you, you will eventually learn all the components of the project. You are faced with a large number of problems and possible dead ends with which you have to figure out what further learning means.

In any case, I believe that you should try to do something at your own discretion at some point.

Understanding the software maintenance process


Working within the open source community is about taking responsibility for your development. Over time, you will begin (you just have to) get to know the culture of this community. Note that you are the owner and maintainer of any open source project that you have hosted on the web. If people find your project interesting, they can start interacting with it, giving suggestions or making changes. It is expected that you will be accordingly receptive to them. So do not refuse to support your own projects after version 1.0.0.

It is common practice to actively maintain and maintain any software at all. Even if your software does not have open source code, but it has many users, it is good practice to continue its development. Users can expect some new features to appear at least occasionally.

Escort does not stop at this. Keep up to date with all costs that you may face even after the project is completed. Creating an iOS application for distribution through the App Store means paying $ 99 a year for the developer community. If you are doing web development like me, then you may have to pay for server time to keep your projects afloat and available for viewing by potential employers (who will like the dead links in the portfolio?). If you are planning to experiment with Amazon web services, then be doubly careful when estimating costs. While some of their products can be used for free or at minimal cost, others can be cost-effective only with large-scale use.

Say no to previously prepared textbook projects.


This is, to a large extent, a matter of personal preference, but I don’t like to study textbook programming. I categorically refuse to program anything that was developed as an exercise for a textbook. While some people think that textbooks and online tutorials are a good starting point for learning languages ​​and structures (I myself have used the Codecademy online platform many times in the past), there are some things that are simply missing there:

1. Textbooks rarely show what constitutes a real development with the technology described in them;
2. Textbooks do not address the problems that you often encounter in practice.

I found that my training goes better when I do real, useful things. It is very difficult to give out original ideas, so do not think that you are the only one. And yet I think this is the best way to continue to keep your interest in the project.

In general, I just create something that has never been done before. And for me the situation looks like a "new idea or failure."

Dont be upset


While working on the project, it is very easy to stumble upon a “brick wall” and stop at a loss. At university, college, or school, you can find mentors or teachers to help you with this “wall” in course projects. But in your own projects there is no such person.

"Brick walls" can be overcome. Well, if you have the time and opportunity to look for help on the Internet. Feel free to ask for help.

Every time you encounter a problem, you gain valuable experience. Sometimes there are problems associated with dependencies, the solution to which is completely out of your reach, and then your project will stop in suspense. But all this gives invaluable experience.

Remember: you will not have mentors to help you with your code when you start working in the real world.

Be that as it may, every failed development project helps to build mental strength against strong disappointment.

Completion of your projects


Finally, you should strive to complete and expose at least one stable version of each project. It is unacceptable that your portfolio on GitHub consisted entirely of, for example, 20 sketches and ideas, which never went anywhere. It makes a bad impression. Employers would like to see a portfolio showing that you are a competent and confident enough specialist capable of delivering something really valuable. Proper packaging, distribution, maintenance and updating of applications, web applications and services is not an easy task and requires special skills.

Bonus: Present your projects in a favorable light

Your article has many correct points. It is always nice to see another student at the University of California at San Diego taking part in the metadisciplinary computer science!

I, in particular, agree with you on personal projects; The main thing that I advised students on their resumes was the following:
  • Move your projects higher in your resume or
  • Do more personal projects if you don't have professional experience.

Not to mention that if you want to be a good software specialist, it takes practice, and a lot of mistakes made when developing a personal project are the best way to learn!

“How I started writing third-party projects to gain experience” - my experience and some recommendations to new and / or advanced computer science students.

User community Reddit / u / k3q3 noted a very good position in response to the original post. Definitely, you need to present your projects in a favorable light at the beginning of your resume, especially if you have no work experience. Your projects will give you more chances to work when applying to your employer than almost everything else (courses, degrees, average score) that you could indicate on your resume (except, of course, relevant work experience).

Where do ideas come from?


Earlier, I already wrote that I do not work with partners, I do not write programs for previously prepared tasks from textbooks, and I do only new and original software. Where did this idea come from?

If you familiarize yourself with my projects , you will see that most of them are far from revolutionary. And that's the whole point. Your projects are not required to be turning the world around. And since it’s not the easiest job to bring new ideas into the world, you can get inspiration from what others are doing.

If you are an inexperienced programmer at school or university, then here are a few ideas (which meet all my criteria) to spark your imagination:


The important thing to do first is to start the process. While working on software projects, you will inevitably encounter curious things on GitHub that will inspire you. Carefully follow what colleagues are doing, and try to introduce their work in your own projects. Carried away by web development, I always keep track of interesting approaches to hierarchical navigation, one-page web applications and other elements of user interaction. If you are passionate about mobile app development, then travel around an app store you like and find inspiration. Look for your preferred languages ​​and technologies on GitHub to understand what others can and can do.

And be sure to interact with other developers that you find along the way. Write programs that will complement the one created by others.

Good luck!

Source: https://habr.com/ru/post/310264/


All Articles