Write some of my own feelings: my software major

写点自己的感悟,我的软件专业

This article is a post previously published at my school, discussing my past experiences and views on learning programming, intended to provide some insights for junior students in the software major. It was recently dug up, and since I almost forgot about it, I’ll tidy it up and share it here.

Foreword

The author assumes that the readers of this article are those who have not been exposed to computer-related subjects but hope to pursue this major. There may be inaccuracies, and I hope everyone can understand.

My journey in computer science began a long time ago when I enjoyed tinkering with various computer tricks and browsing all sorts of “hacker” forums. Forums of that nature before 2010 weren’t as nonsensical as they are today; at least they adhered to the principle of technology sharing. Spending time in forums allowed me to learn a lot. I tried to hack into websites, deploy backdoors, and obtain compromised machines, but at best, I was just a script kid with no real technical skills.

I truly delved into programming in my first year of high school when I found that many technical documents were filled with chunks of code. It was then that I finally understood the meaning of programming and its importance. If I didn’t want to remain a script kid, I had to immerse myself in learning programming.

Thus began my programming journey. I still remember buying my first book, Tan Haoqiang’s “C Programming Language Design.” This book isn’t very good, with numerous mistakes (or possibly errata), and after finishing “C Primer Plus,” I genuinely felt that Tan Haoqiang misled many people. I will later recommend some good books.

High school passed quickly, and I spent a lot of time reading programming books (most of the time, in fact). During that time, I didn’t have a computer and couldn’t debug code. I wrote code in a notebook and, when I had time, went to internet cafés to type it in for debugging, which resulted in a significant drop in my grades. However, I solidified my dream and determined the path I wanted to take.

After the college entrance examination, I didn’t even consider what school to apply for due to my poor results. I only had two principles: get into a school, and it had to be a software program.

This school isn’t bad; at least the environment is good, but the learning atmosphere isn’t great (the reading room on the second floor of the library has many people studying, and I feel that’s where real learning happens). The software major at this school isn’t particularly strong, and there’s no need to elaborate on the teachers’ teaching level. The key issue is the course arrangement at this school; you learn a bit of everything but excel at nothing. When asked in interviews if you’ve studied xxx, you might say yes, but you won’t know anything more when probed. I think this is the biggest flaw in our school’s education.

If one wants to develop in computer-related positions in the future, the most important aspect is to selectively attend courses that benefit your major, especially since you’ll only spend a little over two years at this school. I thank my counselor, Teacher Chen, for her support. Thank you!

Now, let’s discuss the educational requirements for software-related positions.

Is a Degree Important?

In today’s world, which emphasizes degrees and abilities, it’s tough to say which is more important. Before planning to write this article, I interviewed at four or five companies, ranging from small start-ups to large tech companies. I found that almost none of the interviewers specifically asked about your school or grades; the conversation usually started with your views on the industry, your understanding of the position you’re applying for, work experience, actual capabilities (written tests), etc.

One time, I asked an interviewer if the company had any educational requirements. The interviewer replied that at their company, the main criterion is capability; if your professional skills are strong enough, even a high school diploma suffices. Of course, for large, well-known companies like Huawei and Tencent, the typical requirement is a bachelor’s degree. In the domestic tech industry, mainly represented by the BAT companies (Baidu, Alibaba, Tencent), the skills required from employees are quite high. However, an interviewer at another company mentioned that if one passes their assessment, they could receive free headhunting services, and Baidu didn’t specify a minimum educational requirement for employees.

In summary, in the current tech industry, especially in the IT sector, most companies mainly look at capabilities, but having a degree as a stepping stone for interviews is also very important. That said, whether the degree is essential can’t be definitively concluded; different companies have different cultures, and the required skills for their products might vary too. For instance, game engine developers need employees who excel in advanced mathematics, so in such cases, the company’s hiring requirement for degrees might be at least a bachelor’s. On the other hand, if a general company requires employees to effectively manage their own code and use internal APIs without high demands in mathematics, then their educational requirements for employees will definitely be lower.

Overall, the current IT sector is still a wonderful era; a degree cannot determine everything, but having one is useful as a stepping stone for interviews. Of course, regardless, one must possess excellent professional skills, as the knowledge required in the IT field is broad. Now, irrespective of having a degree or not, mastering professional skills is the most important.

Skills Required for IT Job Hunting

When it comes to the skills required for employees in the IT sector, there are many aspects; different positions have different professional requirements. Here, I’ll first highlight the skills required for software development based on previous interview data.

Actually, there are many directions for software development-related jobs. For instance, the currently popular Android and iOS development requires JAVA and Objective-C, as well as C++ or C# for application development, among others. With so many programming languages, I won’t delve too much into that; instead, I’ll discuss the commonalities among these software development directions.

Software development, as the term implies, involves developing computer programs. Most university software engineering departments (like computer science, software engineering, and network engineering) usually teach one or two programming languages (mostly starting with C). Learning a programming language helps you understand the basic principles of computer operation. Similarly, the most fundamental skill required for software development is programming language proficiency. Many might wonder how to learn given the plethora of programming languages available; certainly, each language has its own advantages. It’s just that their application directions differ. The key is to have your own programming mindset, which simply means using programming to solve problems. This is the most basic skill required in job hunting—having your own programming mindset.

Moreover, different companies have different requirements for programming languages. Some companies that develop Android games use JAVA, while those that mainly work on iOS development use Objective-C (of course, SWIFT is also an option). Companies that develop Windows applications mostly use C#. If you want to develop efficient, cross-platform applications, you can use C/C++. For artificial intelligence, LISP can be a good choice, and each comes with its own advantages. Therefore, the skill of being familiar with one programming language (preferably object-oriented) and having a programming mindset forms the basic skill set for job hunting.

Career Advancement for Programmers

During the interview process, I particularly noticed that most companies do not limit their requirements for employees to just the basic skills linked to programming languages; there are many professional skill requirements as well.

In one of my previous interviews, at the start, the interviewer asked: What projects have you worked on? What management experience do you have on projects of scale W or above? What database did you use? Are you familiar with Linux environment development? What experience do you have relevant to the position you’re interviewing for? This kind of questioning can knock you off balance if you aren’t prepared. However, it also reflects the skill requirements of software development.

First, having demonstrable projects for the interview is beneficial; it clearly shows your professional skill level to the interviewer. Of course, if you’re a fresh graduate without notable projects, what should you do? You’ll need to write a few demo projects in your own time.

Second, project experience is often thought to be exclusive to excellent university students or engineers with several years of experience, but that’s not always the case. If you lack project experience, you can discuss your programming experience, code management experience, and so on.

Third, database knowledge is essential, regardless of what language you use to earn a living. Databases are fundamentally about managing data, with famous examples being MySQL and Access. It’s advisable to first focus on learning SQL syntax.

Fourth, Linux—whether you identify as a Linux user or not, you should aim to learn the basic operations and development methods under Linux since many companies’ development environments run entirely on Linux. Most company websites are hosted on Linux servers, so installing a Linux distribution is recommended (unless you’re developing in C#, in which case, it isn’t necessarily required).

Fifth, data structures and algorithms—I initially thought of writing about them separately but realized I would end up repeating much of what I’ve already covered, so I’ll discuss them together.

Data structures refer to how computers store and organize data, designed primarily to reduce storage space—space complexity (O(f(n)))—and improve efficiency—time complexity (O(f(n))). There are many algorithms associated with data structures, which is why I haven’t separated them. Data structures are abstract and require algorithms to describe them. Algorithms, in literal terms, might be understood as calculation methods, but they should actually be viewed as methods that computers use to solve problems. For example, a simple task is determining which number between a and b is larger—can you think of a way to find this out? If you’re thinking, you could just compare the two, congratulations, you’ve identified an algorithm. It’s that straightforward! Programming involves designing algorithms and implementing them, which is both the essence and the most challenging part of programming; the key is practice.

That’s all I can write now regarding the skills required for job hunting in the software field. Currently, it seems that the tech industry mainly requires professionals with adequate skills.

Here are a few essentials for pursuing a software major: a computer (Shame on those who buy high-end computers under the pretense of studying but end up gaming! During this learning phase, you don’t need high performance; if you don’t want to buy a computer, a Raspberry Pi for a few hundred Yuan will suffice); don’t play games (this is crucial); read more books and practice often; strive to excel in mathematics and English (English has nearly driven me to madness…); and maintain your dream persistently.

Here are some recommended books (try to read them in order):
“C Primer Plus,” “C and Pointers,” “Data Structures (Yan Weimin Version),” “C++ Primer” (C++), “Effective C++” (C++), “Introduction to Algorithms.”// The following books can be chosen based on the direction of the job you wish to pursue, as the books for learning JAVA vs. C++ will differ. After going through the few mentioned above, you’ll certainly have your own direction.

Postscript Supplement

I’d like to add a few words: if your mathematics skills are good, learning programming should be a bit easier, as many algorithms in programming can find their abstract models in mathematics—these two modes of thinking complement each other, making understanding much easier. For instance, the find algorithm merely involves unions, intersections, and complements; there are countless similar examples, and I won’t elaborate further, but mathematics can abstract everything!

Moreover, many junior students inquire about how to learn programming effectively. Currently, there aren’t any rigid requirements; for beginners, being literate (able to read books), being capable of using a computer (writing code, researching), and being willing to put in the effort (being able to endure solitude) are sufficient. As for mathematics and English, they are more advanced skills and can be considered preparatory—well worth it!

Attached Mind Map

Below is a mind map I created earlier, outlining the contents of several books, serving as a roadmap. I’ll share it here.

The article is finished. If you have any questions, please comment and communicate.

Scan the QR code on WeChat and follow me.

Title:Write some of my own feelings: my software major
Author:LIPENGZHA
Publish Date:2015/01/04 22:32
Word Count:11k Words
Link:https://en.imzlp.com/posts/44216/
License: CC BY-NC-SA 4.0
Reprinting of the full article is prohibited.
Your donation will encourage me to keep creating!