TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

Developers spend most of their time figuring the system out

482 pointsby xkriva11over 4 years ago

29 comments

bluedinoover 4 years ago
This has always been my pet peeve with jobs that won&#x27;t hire people without &#x27;5-7 years experience with X&#x27; - the vast majority of these jobs do not need an EXPERT on <i>language x</i>, or <i>framework y</i>. If they do, the rest of this post does not apply.<p>You can learn enough of a language to be dangerous in just a couple weeks. Enough to be productive in 2-3 months. However, there are 3 other things you have to learn:<p>1. How the code for the project you are hired for works. How it&#x27;s laid out. All the weird shit about it.<p>2. How the framework&#x2F;libraries used by the project works. Nothing to do with the project, but maybe you haven&#x27;t used Angular, Swing, or Boost before.<p>3. How the data is laid out, and how it gets in&#x2F;out of your system. What database tables are there, what&#x27;s the workflow.<p>Those 3 things are the hard part and what take 6-12 months. Learning Javascript, Ruby, or whatever language is the least of your worries.
评论 #25944379 未加载
评论 #25943991 未加载
评论 #25947380 未加载
评论 #25943076 未加载
评论 #25964319 未加载
评论 #25944233 未加载
评论 #25947145 未加载
评论 #25943204 未加载
评论 #25943020 未加载
评论 #25945414 未加载
评论 #25955133 未加载
评论 #25959471 未加载
评论 #25967836 未加载
评论 #25945632 未加载
评论 #25958850 未加载
jarmitageover 4 years ago
Glamorous Toolkit (<a href="https:&#x2F;&#x2F;gtoolkit.com" rel="nofollow">https:&#x2F;&#x2F;gtoolkit.com</a>) by feenk, which embodies the thesis of this blog post, is in my opinion the most exciting working development environment in decades. I think in 5-10 years people will be pointing to it as having a huge impact on the industry.<p>I implore anyone serious about changing how software development works to digest Andrei Chis&#x27; thesis Moldable Tools: <a href="http:&#x2F;&#x2F;scg.unibe.ch&#x2F;archive&#x2F;phd&#x2F;chis-phd.pdf" rel="nofollow">http:&#x2F;&#x2F;scg.unibe.ch&#x2F;archive&#x2F;phd&#x2F;chis-phd.pdf</a><p>Once you understand the consequences of reducing the cost of specialised tool development by orders of magnitude, it becomes obvious that a qualitative change in experience follows, that brings us much closer to what people like Engelbart were searching for.
评论 #25942190 未加载
评论 #25943333 未加载
gladimdimover 4 years ago
Some of us (me, for example :) have to spend multiple weeks a year to draw the design architecture of certain parts of the product. During engineering meetings everybody raised the same question: i commit to new area in product, how can I understand what are the components and how to do certain things? You can ask your colleagues but they might know it as well.<p>So I decided to document main flows and designs in PlantUML diagrams. having these diagrams greatly improved onboarding process, cause you can quickly glance what component does what and what are the dependencies (the code base was in JS, so it is usually quite limited on refactoring&#x2F;figuring out wtf is going on).<p>But the problem with such approach is: diagram quickly gets out of date. Someone makes the change and the diagram makes no sense at all now. With what I saw in Gtoolkit, you can always query the real source code and build custom dev tools that always produce current and real overview of the system. I would love to have a starter kit for JS projects that you can drag and drop and start building your own tooling for your product.
评论 #25947323 未加载
评论 #25942091 未加载
评论 #25958070 未加载
评论 #25941313 未加载
Glenchover 4 years ago
Couldn&#x27;t agree more. I think we should redesign programming so that it is primarily a method of communicating between humans. If that becomes the focus, we can use the best methods we have of communicating words, graphics, and interactivity to explain complex systems.<p>One of my own projects in this area is a prototype where I made the best possible explanation of a JavaScript library I could: <a href="https:&#x2F;&#x2F;glench.github.io&#x2F;fuzzyset.js&#x2F;ui&#x2F;" rel="nofollow">https:&#x2F;&#x2F;glench.github.io&#x2F;fuzzyset.js&#x2F;ui&#x2F;</a>
评论 #25941847 未加载
评论 #25942977 未加载
评论 #25942833 未加载
评论 #25945547 未加载
评论 #25941369 未加载
hertzratover 4 years ago
The hard part is talking to hiring managers or potential clients about this without sounding like an idiot who doesn’t know how to put his or her shoes on the right feet. What do other people do in those situations to communicate this?
评论 #25941006 未加载
评论 #25940405 未加载
评论 #25941153 未加载
评论 #25940645 未加载
评论 #25977081 未加载
评论 #25942246 未加载
评论 #25940277 未加载
评论 #25940279 未加载
评论 #25940259 未加载
uksmalltalkover 4 years ago
If anyone is interested, Tudor gave a wonderful presentation of Glamorous Toolkit at last month’s UK Smalltalk user group meeting:<p>Part 1 <a href="https:&#x2F;&#x2F;vimeo.com&#x2F;496004749" rel="nofollow">https:&#x2F;&#x2F;vimeo.com&#x2F;496004749</a> Part 2 <a href="https:&#x2F;&#x2F;vimeo.com&#x2F;498735070" rel="nofollow">https:&#x2F;&#x2F;vimeo.com&#x2F;498735070</a>
TbobbyZover 4 years ago
This is my situation right now on a contract I started a few months ago. A consultancy was hired and spent over a year building a system. All the in-house employees don’t really know how it works, it’s essentially a black box to them. So I’m digging through the code to make sense of it and no one from the business can give me test data that reflects what the system was meant to handle. Only thing I can really do is best guess and slowly learn how the business operates while at the same time fix bugs and launch new features.
abeppuover 4 years ago
So, one aspect of this post is: a) a lot of prior work has assumed that &quot;comprehension&quot; and &quot;reading&quot; are the same and b) reading is a bad approach to understanding code.<p>For me, this also calls to mind an old blog post from Peter Seibel about a disconnect where many of us think that we should all be reading code for our own understanding, somewhat like literature, but very few of us do and it rarely yields much. And one of the reasons why it seems that style of reading is ineffective, is that coming to an understanding of code is more like a scientific investigation than just reading prose.<p><a href="http:&#x2F;&#x2F;www.gigamonkeys.com&#x2F;code-reading&#x2F;" rel="nofollow">http:&#x2F;&#x2F;www.gigamonkeys.com&#x2F;code-reading&#x2F;</a><p>I agree with that point. I also agree that we need to be able to create tools that deal with software systems more easily.<p>But I also think two other perspectives are important:<p>- One is the historical perspective. The code-base is rarely a coherent whole. Two different areas may accomplish similar things with different tactics. The design of a component may be ill-suited to the way it is now being used. What is an intentional choice, and what is an accident? Which past choices should my current project align with? We typically read the code as it exists currently, and look at specific parts of the history only as a supplement, because even visualizing history is complex. But understanding why choices were made, and in what context, can be critical to knowing which things can now be changed.<p>- The other is that reading code shows us a complex intensional definition, and reading tests gives us a partial view of an extensional definition (in case X we get behavior Y). But to &quot;understand&quot; programs enough to proficiently change them, we have to grokk something like the neighborhood around our current program: How would a given change in the code change the behavior? Being able to interactively change and re-run a program, and compare behavior before and after is in some sense like doing finite difference method differentiation.
评论 #25947020 未加载
评论 #25946785 未加载
munroover 4 years ago
This is so true, I Twitch streamed myself developing a game, for a total of 64 hours. And looking back, I found the parts where development slowed down is when I was confused--I almost want to yell at myself--hindsight really is 20&#x2F;20.<p>What I took away is the faster I can recognize I&#x27;m in confusion, the faster I can get out of that state--it means I really need to focus on learning what I&#x27;m not understanding, and then come up with a plan to change the actual system into what I want it to do.<p>Another thing is, though I&#x27;ve really refined text editing skills, it&#x27;s interesting to see yourself struggling to _simply edit text_. So while watching myself, I jotted down a few ideas of shortcuts that could help.<p>Final thing, that I don&#x27;t know how to fix, is sometimes I&#x27;m not motivated, or not in the mood, or scatter brained. Honestly, looking at myself, I don&#x27;t know what my deal is. If I can just force myself to turn on the stream, then my friends will pop in and encourage me, so that has really helped. Though I&#x27;ll still hit work that I&#x27;m like <i>ugh</i>.
indymikeover 4 years ago
At the beginning of the presentation, a slide showed the similarities between IDEs. For whatever reason, it reminded me of the setup for every intro to Smalltalk presentation I&#x27;ve been through. Sure enough, Glamorous Toolkit was written in Pharo, and seems to really bring a lot of the smalltalk like tooling to other languages ... and wraps it up with a notebook style UI. It&#x27;s the most interesting Smalltalk thing I&#x27;ve seen in a while.
评论 #25947254 未加载
jrochkind1over 4 years ago
Reading this leads me to wonder: Is a large part of what makes a &quot;5% programmer&quot; or whatever, that they are so much better at comprehension&#x2F;figuring-it-out, and retaining what they&#x27;ve figured out for next time?
评论 #25941497 未加载
评论 #25941466 未加载
评论 #25947647 未加载
cmollisover 4 years ago
I&#x27;ve spent almost a year with Spark and I think I&#x27;m just scratching the surface now. There are so many knobs that just configuring out just the optimal cluster configuration for production jobs took weeks of testing (so much of that is dependent on the data size and specific use-case). The docs are pretty good, but really don&#x27;t detail any of &#x27;gotchas&#x27; that you&#x27;ll find in production (you have google relentlessly for those), and the hacks you put in place to deal with those, well, you&#x27;re on your own. Unless you have a staff that has worked with the toolset for years with it (which we don&#x27;t.. I&#x27;m basically it), you will spend weeks in a try &#x2F; hack loop. All that said, it&#x27;s a great toolset for its intended purpose..scala is a great language, etc, etc.. but I&#x27;ve spent a long time &#x27;figuring the system out&#x27;.
pronover 4 years ago
I&#x27;ve found Source Sourcetrail (<a href="https:&#x2F;&#x2F;www.sourcetrail.com&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.sourcetrail.com&#x2F;</a>) an invaluable tool in aiding program comprehension, especially in C++ projects.<p>There&#x27;s another interesting program comprehension tool based on dynamic analysis (as opposed to Sourcetrail&#x27;s static analysis), which I&#x27;ve yet to try: <a href="http:&#x2F;&#x2F;findtheflow.io&#x2F;" rel="nofollow">http:&#x2F;&#x2F;findtheflow.io&#x2F;</a>
brundolfover 4 years ago
The tooling approach is an interesting one, but I think the most important thing remains documentation. The &quot;treat code like data&quot; analogy breaks down because unlike (most) data, code is a thing that was intentionally crafted, one piece at a time, by a relatively small number of people, many of whom are probably still in the building. It isn&#x27;t some foreign artifact, understood by no-one, that&#x27;s been measured from impersonal processes. It was <i>made</i>. Almost by definition someone has <i>already had an understanding of it</i> at some point. Reverse-engineering a new understanding from scratch - even via powerful tooling - remains a wasteful path to take compared to simply reading a (written-down) understanding that already exists.
rob74over 4 years ago
From my experience, when changing (or fixing) something on an existing system, I typically spend ~48% of the time figuring out where to do the change, then ~2% actually doing the change, and then another ~48% testing it and adapting unit tests broken by it.
评论 #25947262 未加载
评论 #25942153 未加载
kelvin0over 4 years ago
I also remember a post on HN about Chris Granger&#x27;s Lightable IDE?<p><a href="http:&#x2F;&#x2F;lighttable.com&#x2F;" rel="nofollow">http:&#x2F;&#x2F;lighttable.com&#x2F;</a><p><a href="https:&#x2F;&#x2F;www.chris-granger.com&#x2F;lighttable&#x2F;" rel="nofollow">https:&#x2F;&#x2F;www.chris-granger.com&#x2F;lighttable&#x2F;</a><p>Although as ground breaking, it does not seemt to have &#x27;taken off&#x27; as much as it should?
JoeAltmaierover 4 years ago
The difference between operator and Engineer is, you need an Engineer when it&#x27;s not obvious what to do next. That&#x27;s the whole job - figuring the system out and finding a solution.
评论 #25944165 未加载
ephaetonover 4 years ago
So let me get this straight: A programming environment to program programming environments in. What would be the startup cost of using this be? Hmm. Comprehending and navigating it, eh? So now, when I&#x27;m, say, doing embedded C&#x2F;++ programming, I have to add yet another language to the stack, yet another toolkit, yet another environment _I have to build first_ with my preferences -- so that _another_ person getting into the project can not only use my environments, my toolkits, my code and comprehend those - but ALSO my hand built specialized for my needs programming environment? And this is supposed to _improve_ the situation?<p>OK, I only skimmed the site, but mostly because above question keeps nagging me and the mind boggles.<p>IOW, gtoolkit is today&#x27;s sexy emacs (or, it claims to be what emacs claims&#x2F;ed to be): Here&#x27;s a toolkit for writing&#x2F;extending&#x2F;MOLDING your tool. Or, acknowledging it&#x27;s smalltalk-heritaged, it&#x27;s yet-another-smalltalk-IDE.<p>It&#x27;s not like the &quot;extra work&quot; of making your product explorable disappears with glamorous toolkit, the silver bullet. gtoolkit just offers a streamlined set of APIs for you to (comprehend, and navigate, and then) use to make your product explorable, doesn&#x27;t it. So we add another layer of abstraction, work, and potential for error? What was that with complexity and abstraction? Hmm.
评论 #25947223 未加载
staplungover 4 years ago
I know that the programming language is only part of the story but I do wish more programming languages put a greater emphasis on readability and maintainability rather than writing. I find it particularly annoying when a language does not allow you call functions&#x2F;methods with named parameters. E.g. it&#x27;s possible in python, required in Swift and impossible in Golang.
contingenciesover 4 years ago
Hence the value of documentation. NIH syndrome is perhaps often a rational &quot;I need clarity and control, so I am not going to waste time grokking the existing implementations and just re-implement&quot; decision.
dfilppiover 4 years ago
The industry tooling for visualizing software architecture is not adequate.
评论 #25944320 未加载
评论 #25947274 未加载
silicon2401over 4 years ago
Does someone have advice on how to figure out a system, especially a Java API? I&#x27;m supposed to own an API at work, but I never really understood how to learn an API. Do you type out the functionality in text? Do you draw a flow diagram? Do you keep things at a class level or dive down into functions and variables? The bright side is that this API isn&#x27;t very big, so I do want to use this as an opportunity to really learn it and also learn how to approach studying API&#x27;s in general.
评论 #25943392 未加载
评论 #25944265 未加载
评论 #25945025 未加载
kiliancsover 4 years ago
This is why following conventions for whatever technologies you are using (not reinventing the wheel) has value. Same for documentation. Going the extra mile to document what you are doing and why, with some examples, or to update the documentation as things change, is not only valuable, but a clear sign of the maturity of a developer.
DrFellover 4 years ago
This will probably get worse as the value to engineers of fighting for architectural sanity diminishes in the modern semi-disposable project based job economy.<p>I have no stake in the the companies future? OK, add another layer of abstraction to &#x27;fix&#x27; that nonissue. Whatever. I can avoid it for as long as I can see to care.
frongpikover 4 years ago
In other words, the secret sauce of a scalable, in terms of people, software project is the lack of any clever bs in it: such a project uses only boring predictable patterns in everything.
zbyover 4 years ago
One thing that helps me enormously in figuring the system out is running tests. I was surprised to see no mention of tests in the article.
tudorgirbaover 4 years ago
Indeed they do!
konjinover 4 years ago
&gt;We created Glamorous Toolkit to provide a concrete start for the &quot;how not to read code&quot; conversation. Glamorous Toolkit is a moldable development environment that makes it possible to create custom tools about software systems inexpensively.<p>That was the most blatant blogversising I have ever seen.
评论 #25940816 未加载
kitkat_newover 4 years ago
Put more time into it at the beginning and save a lot of time later<p>Rust is ideal for that if you have the opportunity to use it
评论 #25940265 未加载
评论 #25940264 未加载
评论 #25943145 未加载