TE
科技回声
首页24小时热榜最新最佳问答展示工作
GitHubTwitter
首页

科技回声

基于 Next.js 构建的科技新闻平台,提供全球科技新闻和讨论内容。

GitHubTwitter

首页

首页最新最佳问答展示工作

资源链接

HackerNews API原版 HackerNewsNext.js

© 2025 科技回声. 版权所有。

Tips for beginning systems and software engineers

217 点作者 ilyash大约 9 年前

16 条评论

gregdoesit大约 9 年前
I am glad you put automated tests as one of the first ones. To this date I find that many people - often mid level, and sometimes senior developers - are very uncomfortable with autmated tests. As a result they don&#x27;t use this tool, and end up being less productive, and often write more complex than needed code - and of course code with more bugs that could have been avoided.<p>I&#x27;m no TDD or automation advocate - however I do see that this tool is essential to modern software development, and the only way to learn to use it, is by practice.<p>I would encourage every engineer who&#x27;s covered the basics to go full-in on TDD with 100% test coverage for a few days or weeks. Not because it will make you more productive or less bugs (you will be less productive), but it will change your thinking of writing code (similar to how learning Lisp will have a massive impact on your thinking of structuring code). TDD + 100% coverage is an extreme, which is worth experiencing to take learnings from it.<p>Later down the road, when you&#x27;ve gotten into the habit of developing with no, or barely any automation, it will be much more difficult to learn to fit this tool into your coding routine.
评论 #11729229 未加载
评论 #11730691 未加载
评论 #11730009 未加载
评论 #11729254 未加载
评论 #11729133 未加载
评论 #11729342 未加载
评论 #11733774 未加载
aavotins大约 9 年前
I can add another thing from my personal experience - if you&#x27;ve just started out and you land in a job where you&#x27;re the sole warrior or you don&#x27;t see a single person who&#x27;s smarter than you, get out as fast as you can. In best case scenario you will not learn anything, in the worst case scenario, you will learn bad things that you&#x27;ll eventually have to unlearn.
评论 #11729124 未加载
评论 #11729011 未加载
评论 #11729112 未加载
评论 #11728987 未加载
评论 #11729062 未加载
Kurtz79大约 9 年前
&quot;Learn at least 3 very different programming languages. I’d suggest C, Lisp and Python. The chances are that you will not find a Lisp job but it surely will make you a better programmer.&quot;<p>(I understand these are suggestions and we are in the realm of personal opinions).<p>Even as a Systems&#x2F;Embedded programmer it&#x27;s hard for me not to consider HTML&#x2F;Javascript a must-have, this day and age (not a nice-to-have).<p>Even in embedded&#x2F;industrial systems nowadays it&#x27;s perfectly normal to have a maintenance interface based on a lightweight web server.
评论 #11731051 未加载
评论 #11729139 未加载
thecopy大约 9 年前
Do i really _must_ know 1) Big O notation, 2) common algorithms and their time and space complexity, 3) which opcodes exist for a CPU of your choice and 4) a kernels main system calls?<p>I dont know any of these. I know they exist, i know of the concepts, but no specifics. I would argue that these are good to know, and a must if you are working in a domain where this matters. For design, architecture and implementation in a high level language when the problem do not touch these areas this is not a MUST have.
评论 #11730553 未加载
评论 #11729224 未加载
评论 #11729186 未加载
评论 #11729295 未加载
评论 #11731123 未加载
评论 #11729257 未加载
评论 #11729804 未加载
评论 #11730241 未加载
评论 #11730718 未加载
andy_ppp大约 9 年前
I&#x27;ve been told conflicting things about don&#x27;t repeat yourself; sometimes you end up making something wildly complex to avoid repetition - since learning functional programming I&#x27;m starting to think breaking things down into small reusable pieces that can be repeated in different ways is better.
评论 #11729151 未加载
评论 #11728891 未加载
评论 #11729007 未加载
评论 #11728878 未加载
评论 #11728894 未加载
js8大约 9 年前
I would add two things to this:<p>1. Automated tests are not the only way to write code with less bugs. The other two, currently less in fashion but IMHO very important, techniques are abstraction and assertion.<p>2. In my view, there are two kinds of automation - bad and good. Bad automation checks if humans did some process correctly. Good automation implements some process without human intervention. It&#x27;s very easy to start working on bad automation rather than the good.
评论 #11728980 未加载
评论 #11729064 未加载
评论 #11732015 未加载
评论 #11729045 未加载
评论 #11729065 未加载
objectified大约 9 年前
I must say that the more I read articles of this character, the more I feel that it would make sense to distinct between different types of &quot;engineers&quot;.<p>A lot of the proposed advices are applicable only in certain fields, and not so much (or not at all) in different fields, whereas every field can go very deep (so it&#x27;s a waste of time gaining knowledge you&#x27;ll never use there). While a number of these advices are fairly generic, others definitely are not. A front end (client side) web developer won&#x27;t benefit from having deep knowledge of data structures or the kernel, but he will benefit from knowing about Big O notation. Additionally, he will benefit lots from knowing how browsers work, and having deep knowledge of HTTP. Someone working on ETL processes all day will not benefit much from knowing about interpreters and compilers, but will benefit from knowing a lot about UTF-8. But also, he will benefit lots from knowing a large number of layer 7 transport protocols. A systems programmer (defined as &quot;someone who programs close to the hardware&quot;) won&#x27;t typically benefit much from knowing javascript or how browsers work, but will benefit lots from Big O notation, data structures and algorithms, and C. And so on.<p>I&#x27;m seeing a future in which we will be able to more distinctly treat separate specialisms within the field that we now call &quot;software engineering&quot; (or countless variations on it).
评论 #11729402 未加载
peterwwillis大约 9 年前
<p><pre><code> &gt; Automated healing &#x2F; rollback </code></pre> Jesus christ on a cracker, please use this sparingly. It&#x27;s one thing to have buggy software. It&#x27;s another to change versions of software <i>right underneath your users</i>. This is like polishing a dance floor while the DJ is still spinning. It doesn&#x27;t matter if you&#x27;re reverting to an old good version; unannounced, unplanned &amp; unexpected changes lead to disaster. Known bugs are better than unknown changes.<p><pre><code> &gt; Don’t duplicate code </code></pre> Yes, this is a really bad idea, but forking is the cheapest possible way to make changes that break as few things as possible. Yes, it&#x27;s a nightmare in the long run. Ask your boss if he really cares about the long run.<p>Everything else was spot on.
gremy0大约 9 年前
I don&#x27;t really get the Ease vs Simple section, what point is he trying to make?<p>This is simple:<p><pre><code> i = 0x5f3759df - ( i &gt;&gt; 1 ); </code></pre> Where this is just easy:<p><pre><code> famework.authService.login(&#x27;user&#x27;,&#x27;password&#x27;) </code></pre> Good article though.
评论 #11729119 未加载
评论 #11730017 未加载
评论 #11728982 未加载
评论 #11729282 未加载
评论 #11729023 未加载
BugsBunnySan大约 9 年前
Nice post! I hope lot&#x27;s of people read and understand it, the world will be a better place for it :)<p>One thing that would be good to add is: If you implement a way to create&#x2F;add something, implementing a way to delete&#x2F;remove that something isn&#x27;t optional.<p>As Lovecraft put it: &#x27;Do not call up that which you cannot put down.&#x27;<p>This will result in a system that keeps proper track of stuff.
ilyash大约 9 年前
There are many good points in the comments here. Thank you! I have added a link from the blog post to this discussion.
any1大约 9 年前
It&#x27;s usually managers who buy the hype. They&#x27;re the ones who need to be told to be sceptical.<p>Nice post, by the way.
karlgrz大约 9 年前
Good list.<p>I would add &quot;Software that does not ship is essentially useless.&quot;<p>To clarify, I mean that you can polish and try to perfect as much as you want, but at some point you have to get it into the hands of users to be actually useful.
cmcginty大约 9 年前
I&#x27;m not convinced on servers must be set to UTC timezone. Maybe just write your server code to read&#x2F;store UTC time, which is easily calculated from any timezone.
评论 #11735447 未加载
nekopa大约 9 年前
Can we somehow change UTF-8 to WTF-8?<p>Over the last 12 years or so I have constantly been bitten in the ass by UTF-8. It first started when I moved from the US to Europe and decided to help people make websites in their native language.<p>More recently I was developing a piece of python code to help me with a thing. Running into UTF-8 problems made me decide to do a deep dive into what it is and how it works. After a week of diving down a rabbit hole I am still none the wiser.<p>Blog post after blog post, video upon video, and it still doesn&#x27;t click for me. Yes, I solved my problems, but in a black box type of way.<p>Can anyone recommend a good book or long source to help me with this?
eternalban大约 9 年前
Missing advice: Learn to read specs.