This question is frequently asked nowadays as evidences show that many people dropped the college and they are now famous such as Mark Zuckerberg and Bill Gates.
For me, I always believe in Mathematics which says that 1+1=2 and it never going to be 0 or 3; and every rule has exception or abnormal state. Mark and Bill are the exception case not the default case. There are lots of factors in the equation that brought to us people like them. Imagine if Bill failed to build Microsoft, what would he do then? Imagine if Mark failed to market Facebook, what would he be?...etc. The intelligence only is not enough to make you a success person. You need many many things such as luck, circle around you, initial budget, on time right decisions, vision, suitable environment, conscious people and well study to the market need.
I know that world is not like before. Now, Internet and communication tools are everywhere. You can learn anything anytime. But, let me give you an example that I live. Mike sent his CV to me that shows he built many good applications that might bring good income to him. He works with Java or React-Native to build mobile Apps. Another one called Stephan, his CV says that he works with Java too, HTML5 and JavaScript. Both are good candidates (according to the screening). However, I noticed that Mike dropped the college and studied online courses while Stephan graduated from faculty of Computer Science.
I called both for interview. I asked both the same questions such as:
1- Describe how garbage collection works in Java?
2- Does Java use pointer? If yes, how does it work?
3- What are the 3 sections of RAM? How your application variables get allocated?
4- You use tools to check the memory utilization, explain it?
5- How debugger works?
You can imagine the answers of both. Some people says such questions do not matter as such knowledge are not important to build applications. I disagree. Knowing such science and knowledge gives you the ability to build very strong application that can adapt and live for long time. It also let you use the development tools in the best way. It reduces the number of bugs and prohibits repeating of such bugs. It gives you the power of building enterprise critical applications such as Telecom where millions of users are in charge of your system.
Science is important whatever happened. To be good software engineer, you need to study the science of the development tool and technologies you use.
Top comments (6)
I don't think I could answer any of these questions, although at one time or another I could have. And I am not sure that I know many colleagues that could answer them either, and I've work with a lot of guys who not only have degrees in computer science, but masters and/or PhDs.
I used to keep on top of stuff like this despite the fact that I literally never used it in developing anything because I would often ask interview questions like this. But after about 20 years in the industry, I have come to realize that the answers to these questions were never very well correlated with the job performance of the candidates who eventually got the jobs.
Also, I would not confuse understanding the principals behind any of these things (which is what you really need to know) with the ability to tell you, in specific and on the spot, with the details of how they work.
I started my career as a C & C++ programmer for Telecom system. Sometimes, I had to spend couple of days debugging my code because of pointer exception that is not caught. In addition, the system was real time, asynchronous and multi-threading. Imagine you debug thousands thousands of lines of code and you have limited hardware resources such as 4MB RAM which requires your code to optimize memory allocation.
Imagine the same situation with the medical devices that work in emergency cases. You must ensure that they never fail when they get into the field.
There are lots of examples where applications have to consider what I mentioned in the article.
Sure, of course there are jobs where this matter. At my previous job, I worked with a lot of embedded applications and our devs messed around a lot in the kernel. Those guys need to know this. I on the other hand was writing javascript video players. I did not, although I had to know a heck of a lot about video and audio codecs, javascript internals, etc.
Software development is a huge field. Someone designing a REST server in Java that'll run in the cloud really isn't going to need to know any of this stuff, and if he's been doing it the last 10 years, he'll be rusty on it.
It's just like how every lazy interviewer (I speak from experience, having been one) asks candidates to do binary tree traversals even when the candidates are applying for a job where the vast majority of what they'll need to do is actually string manipulation. If the candidate was a genius at regexes (which are really hard!), they never find out because they're just hung up on whether the candidate can whiteboard an algorithm he hasn't used since college.
And the real kicker in hiring philosophies like this is leads to engineering cultures where developers look at phone screens and interviews as ways to prove to the candidate how smart they are, rather than ways to drill into the behavioral candidates that your company should care about. I'll take "attention to detail" over "knows heapsort backwards and forewords" as a characteristic every day.
Excellent! We are on the same page.
What kind of tools would you use to check memory utilization?
You can refer to the following links:
docs.microsoft.com/en-us/visualstu...
docs.microsoft.com/en-us/visualstu...
Performance counters in .NET: msdn.microsoft.com/en-us/library/w...
CLR memory counter: msdn.microsoft.com/en-us/library/x...