Job Recruitment Website - Job information - Is the front-end easy to learn?

Is the front-end easy to learn?

In fact, there is no such thing as whether front-end learning is easy or not. Learning itself is a continuous breakthrough. It is a process of encountering problems and solving them. It is definitely difficult to learn well.

I saw an article on a foreign website reddit yesterday. The author shared his experience of finding a job after 9 months of self-taught programming. The article received more than 3,000 likes and 200 replies in less than a day. I read the content and found it to be very pertinent. Many of the suggestions were also made by me many times in programming classrooms. So I translated it overnight. The original article is a bit long, so I have shortened it appropriately. Added a few more of my thoughts (italics in parentheses). Although the national conditions are different, the essence is the same, which is of great reference value for friends who want to enter the industry.

To make a long story short, in December 2017, I was at a crossroads in my life. I felt entangled whether I should continue to complete my master’s degree in chemistry with no end in sight or find my own way out again. At that time I wrote some code (just a few hundred lines of Python) and it felt good. I decided to use my savings to learn programming until I found a job as a developer. ?

Looking back on this long and difficult journey, I would like to share some experiences, how it started and how it ended. My points are in no particular order, although I will write the ones I think are most important first.

1) Set a very precise goal. I mean realistic goals. This is the most important aspect of your journey and you need to have a clear idea of ??the finish line. Are you learning programming because you want to solve some practical problems? Maybe you want to automate some tasks in your work/life, maybe you want to hack games, maybe you are motivated by curiosity, maybe you like to learn new things, or maybe you are an entrepreneur who wants to develop an app but has no funds. In this article, I mainly talk about the perspective of finding a job by learning programming.

2) If your goal is to find a job, focus on the job market, not what’s trending on Twitter and Medium. Remember the first point? You have to set a very precise goal. A goal like "I want to be a developer and work in the games industry" is too vague. What are your top priorities? Looking for a real development job, or working in the games industry? What if you can't find a job in the gaming industry? What should you do if there is no such company in your city, or if you cannot meet the requirements of game companies? In fact, no matter which programming language you learn, I dare say that this knowledge may be used in game development one day in the future, as long as this is your goal. You will need to learn a lot of new things. But you have the problem-solving skills and programming knowledge to take the first step.

If you are a self-taught developer and not a top graduate of MIT, it will be harder to find a job in another location. I made a mistake in December 2017: I thought my first priority was to find a job as a front-end developer. But I didn't realize that the ratio of C#/php/Java jobs to front-end JS jobs in my area is 9:1. So check out companies in your area to see what their positions and requirements are.

(If your goal is to change careers, you might as well start in a junior position first, and then continue to adjust to the direction you expect)

3) Never, never assume what is more difficult in programming What's easier. I did this when I decided to learn front-end. This is a huge mistake. It's hard to say whether front-end is easier or more difficult than back-end. The point is, you can't know what you will like more or what you will be more comfortable with. So don't assume. Never think that JavaScript is easier or harder than C. Different tools have different complexities for different problems, and you're not yet at the point where you can tell what's "harder" and what's "easier", and neither do I. Just don’t measure it. Can you tell me, 24 months from now, it will be "easier" to improve rendering and network performance on a certain platform than to optimize an algorithm for predicting weather based on geospatial data? Are you sure it's easier to manage state in a complex real-time application than to write shaders or teach a computer how to translate or draw? You have no idea. So, never make such mindless assumptions.

4) Keep learning. How much time do you have to learn programming? Are you a student? Still unemployed (like me) but with enough savings to invest in studies. Your goals should be realistic, but persistent.

Writing code for 1 hour a day will make you a better programmer than coding for 7 hours once a week.

5) It is not necessary to know everything required for the position. This is especially true for frameworks and libraries. Top companies focus a lot on data structures and algorithms, which shows you can think and solve problems. More specifically, no matter which programming language you choose (you can probably find a job in any of Java, JavaScript, C#, Python, and PHP), learn as much as you can about its basics. I learned front-end development. I think this requires learning a lot of libraries from html to dom, transpiling, webpack, etc. But in reality, these topics are rarely asked in job interviews, they just want to know if I really know JavaScript. I applied for 3 frontend React jobs and no one cared if you knew React calls (I mean if you learn React you should have at least basic knowledge of how it works) but to be a good React developer The core knowledge one needs is to know JavaScript. If you know JavaScript and DOM, learning React only takes a week. Otherwise you will never become a good React developer. Higher order functions, this binding, these are the questions and knowledge that React developers really need to face every day, the rest is just a Google search. The same applies to any other language. Without a solid language foundation, various bugs will make you unable to do anything. Just because you've read something, doesn't mean you've absorbed it, let alone mastered it. A person who knows 10 skills/tools but is not truly proficient in any one will have a hard time gaining the trust of others.

6) Try to find a mentor. There are many people on Slacks, IRC, and Discord who have more experience than you, and you may be able to find someone willing to help you in the long term. Thanks to all members of freenode's javascript channel for helping me learn (especially ljharb, slikts, stennowork, liste, innovati, zsoc, cjhonson, qswz, GreenJello, sillyslux). Please note that I am not asking you to contact these people, they provide help in discussion groups rather than one-on-one. Two suggestions: 1. Don’t test the mentor’s patience and willingness. If you keep asking basic questions that you can search or look up in a book, they will get bored and not bother to answer you. 2. Programmers, including you, all hope that others will recognize their intelligence. I think this is the essence of rational people. You can take advantage of this, for example: if you go into the chat room and write "To be honest, I don't think anyone here knows how to bind arrow functions", you will get 20 replies. And if you ask "How to use arrow functions?" there may not be any answer.

(The advice and guidance of an experienced person is very helpful for learning, which cannot be achieved by any books, tutorials or videos. Regarding this, students who have participated in the programming classroom code action should have a deep understanding of this. )

7) Understand what programming is: taking data as input, doing some processing on it, and generating an output. This is what every program does. Add two numbers: input number -> process -> output sum. Render 3D model on screen: Camera + Vertex Matrix -> Processing -> 2D image on screen. Set your profile picture on the website: Data input + address -> Processing -> Response from server. That's what programming is all about, it's all about computing. Data -> Processing -> Data. But I know very little about data structures and algorithms. I wasn't very good at implementing merge algorithms or implementing complex data structures, and they weren't really asked for in interviews. Knowing time complexity and application of different data structures was enough for my interview. But it may be different at other companies and positions.

8) Understand what programmers do. They solve problems through code. As a programmer, you solve problems (usually of your own creation). If you can't solve the problem of the code, then what's the use of you.

If you think that following some bullshit videos on youtube/udemy might make you a programmer, you are dead wrong. Watching others solve problems for you means you are not improving your problem-solving skills. So when you don't understand some code, don't rush to Google or ask someone. You know, this is the job you have to face. Be good at solving problems, some may be grammar issues (as mentioned before), some may be performance related, etc. Learn to use a debugger. Code is just the implementation of an idea, and programming is accustomed to pencil and paper. Define your problem, inputs, outputs and how to get from one to the other. Clean up your code, look at your messy spaghetti code, look at your messy and poorly named functions and variables, look at your code that is unmaintainable beyond a few hundred lines, and try to improve it.

9) Master the basic knowledge of computers. Serious face. You need to at least understand the von Neumann structure and memory model, which can be learned in a few hours. Even if it's through Wikipedia, Youtube or some blog, at least do this. Understand the memory model and call stack, your code level will improve, and you will code faster. You'll never again wonder why you can't modify a string, or why you pass non-basic types by reference instead of value. This is of great significance to improve your learning speed and deepen your understanding of the principles of computer operation.

10) Don’t learn from videos. The more advanced and niche you need to do, the fewer resources you have at your disposal. You have to get used to not being able to find much information even on Google. You will need to use libraries with little or no documentation, and you will need to look at the code to figure out why the library changed that object type, or behaved differently than expected. Go to Github and look at some popular libraries, there are a lot of issues to research there. The best engineers before you have never faced these problems. I know it's not easy, but it's a good habit. I've yet to see a programming problem written better in a video than in an excellent book or article. And be aware that many of the people doing these courses are not necessarily good programmers; even if they are, they are not necessarily good teachers.

I'm not saying "don't use video". There are many videos that have helped me a lot, helping me understand concepts, solve problems, and see how to use some technologies. But until the end, don't use this resource and don't rely on it. For example, I like Andrew Mead's React course very much, but if I didn't study it myself and try it over and over again, none of the content I saw would become my own. Relying on a video to learn about examples of a specific version of a software is only a last resort alternative.

(Do you think a real programming expert will broadcast live broadcasts all day long to teach you how to write entry code?)

11) Debugging and version control. This is most important for learning language and computer basics and is what is most needed in a work environment. The second is the use of tools. If you know Java, learning Spring is much easier than learning docker and git. But you'll probably spend 95% of your time writing Spring code. Another example is that if you master Python, you can learn Django in a weekend, but it will take more time to learn to debug erroneous Python code. The same goes for IDEs. Knowing 5 IDEs is not as good as using 1 proficiently. These are not necessarily necessary skills for entry-level positions, and you don’t need to know them, but this thing is useful in the long run.

(Debugging and version control are important signs that distinguish novices from programmers, and they are also a bonus for job hunting. Reference: 5 minutes of development, 2 hours of debugging - What is your problem?)

p>

12) Don’t try to learn too much at once. Take small steps, but keep them steady. I've made this mistake before, and paid a heavy price for it. It’s not that reading Hennessy and Patterson is useless, or reading about design patterns is useless, it’s not that watching Youtube videos, interesting technical discussions, reading about Behavior Driven Design is useless, but remember the first point? You must understand what is first and take every small step in a down-to-earth manner. If you're like me and curious, that's fine.

But wouldn’t it be better to get a job first, make a salary in a comfortable environment, learn from senior developers, and then go home and try programming in Rust and watch the talks about immutability?

About recruitment:

13) Network > Experience > Knowledge.

Most companies are recruiting for a long time, but they don’t announce it to the public. Maybe they don’t even have a “Contact Us” on their website. So networking is crucial when looking for a job. I strongly recommend joining your local community online, offline is even better. None of the resumes I sent out were responded to, and all the interviews I got were from people I knew. When the other party knows that you are a developer, they may say to you, "If you are interested, I can pass your resume to my boss."

If you are a self-taught developer, then Finding a job can be difficult (although this depends on the region and position). Although you are highly skilled and knowledgeable, you have no experience to put on your resume. Just say I know Python, and no one will give you an interview because you can't prove it. Recruiting you may mean the company loses money. If there are a few developers who are getting paid without producing any output, the human resources department might as well do something else. I know how painful it is to have great skills but not be able to demonstrate them, but that’s the reality.

So after connections, the second most important thing is experience. You have two options: participate in open source projects (write some useful libraries/modules, even submitting a good modification will get extra points) or develop something that people will use, or even give others free use. I chose the second option. I developed an application for a football club in our city that needed to notify players which youth teams would be playing on Sunday. It’s not a great app, but hundreds of people use it every week.

It’s amazing that you can use code to solve a real-life problem and meet people’s needs. I also wrote a short-term rental website for my uncle. It did not have a complex database for real-time booking, but it solved his problem. Even if it has many anti-patterns, will it have a big impact? Maybe you made a polished fork of Instagram with cleaner code, but will anyone use it? Are any of them original to you? Maybe you have a smart TV, and you always have to copy various programs from the hard drive to the TV to watch. When you feel tired of this, have you ever thought about doing something?

You have a router and a TV that can install software programs. Why not spend a month writing a crude but useful app that allows data transfer between your computer and TV. These also look great on a resume because they give you the opportunity to talk about how you solved problems, such as what you did well and what you didn't do well. My first React app didn't use a state manager, and I ran into a lot of problems as a result, and it became increasingly difficult to maintain the code.

I encounter a problem, solve it, and know whether my solution is good or bad. Look around you, what can you do to help people solve their problems? Start with your own problems and then focus on other people's, even if it's a free service. And you use Django+PostgreSQL? What’s there to say about perfectly replicating Twitter? < /p>

Finally, it’s your knowledge, and it’s important. If no one helps you submit your resume and says that you are a high-quality resource, then knowledge is your last trump card. You've released two Android apps, so at least you have something to write about on your resume. You may not be able to answer the questions you are asked, but if you are given time, you can always make a product. So knowledge becomes your only resource, but it's not that powerful. When you sit in front of someone with 10 years of experience and say "value" instead of "variable", others have an idea of ??your level.

Suppose no one recommends you, no one uses the code you wrote, and your GitHub is a bunch of newly initialized or abandoned projects, or some snippets copied from tutorials; suppose you are asked some basic questions (actually (also the hardest), and you can't confidently give a clear answer, who will pay you?

14) Tip 1: If you have 6 to 7 months to prepare before officially looking for a job, I recommend learning C language. It's a small language but it can teach you a lot. Let's put it this way, if I spent 2 months learning C language (at least 4 hours a day) and solving some easy and medium difficulty problems on Leetcode before spending 4 months learning another high-level language, I would be A better programmer than I am now. There is so much technology now and there is a lot of "noise" in high-level languages.

You will soon be lured away from the question "How do I get from input to output" to other concerns, but this is the most basic step in writing a complete code. I know writing "input" and "output" is not cool at all, but remember point one? We need to find a decent job that allows us to earn money as soon as possible. Learning C language may be slow at first. But when you learn the next language, you end up solving the same problems as using C, but using countless APIs.

15) Tip 2: Learn to manage your time. It is tempting to sit in front of the computer all day long to learn programming and browse various websites, but these are all a waste of time. If you manage your time well, you can shave weeks or even months off your preparation time.

16) Tip 3: Rest, socialize, fall in love, have fun, and take care of yourself, these are all super important. Sitting there by yourself, reading blogs and staring at Visual Studio all day long is not good for your mental health and will make you feel out of place with others. Study hard and learn to be self-controlled, but be self-controlled in other aspects of your life as well. Because once this balance is broken, problems will arise elsewhere.

That’s all. If it’s too long, please don’t mind. I hope someone will find this article helpful, and this is just my personal opinion, and many people may disagree.

Basic self-study front-end for beginners recommends some good learning websites