Dev

Collections

  • Teach Yourself Programming in Ten Years - Why is everyone in such a rush?
  • Google Style Guides
  • Hibernate should be to programmers what cake mixes are to bakersย -ย This is a talk about the problems of creating convoluted abstractions and how not understanding what happens underneath makes things more complex instead of simplifying them.
  • How to transfigure wireframes into HTML
  • Does WWW still belong in URLs?
  • roadmap.sh - Community driven roadmaps, articles and resources for developers
  • https://github.com/sindresorhus/awesome - ๐Ÿ˜Ž Awesome lists about all kinds of interesting topics
  • test && commit || revert
  • Limbo: Scaling Software Collaboration

    Sort commits into โ€œcouldnโ€™t possibly cause problemsโ€ (youโ€™ll be mostly right) and โ€œmight cause problemsโ€. Treat them differently. Rearrange your workflow so you have mostly โ€œcouldnโ€™t possibly cause problemsโ€ commits.

  • Software effort estimation is mostly fake research

    from HK news

    • It's not fake research. It's actually quite an established science in the 24 years I've been doing it.
    • Take your first guess, double it, double it again if the stakeholder is a poser, add 20% per developer less experience than you, subtract 10% for the features you're going to essentially copy paste, add 15% for sick leave (browsing HN) and then double it for every question you have that are unresolved and divide it by the room temperature multiplied by the amount of people with mechanical keyboards.
    • That gives you roughly the right estimate for any job, until the next sprint.
  • Nobody ever paid me for code
    • Don't:

      We should migrate from SQLite to Postgress. We are getting concurrency errors because too many processes are trying to write orders at the same time and it's not something we can queue because it needs real-time feedback.

    • Do:

      Some users are getting errors when too many of them order at the same time. We tried workarounds but they make for a bad shopping experience. This is not a trivial change to do. We are currently working on X, but I think this is more urgent. I advise we suspend work on X so that I can evaluate how much we need to do, and then plan for this change.

  • The Worst Programmer I Know

    Tim wasnโ€™t delivering software; Tim was delivering a team that was delivering software.

  • Measuring developer productivity? A response to McKinsey
  • Some notes on Local-First Development
    • cr-sqlite - Convergent, Replicated, SQLite - "It's like Git, for your data."
  • People will never be motivated to go the extra mile by a standardized, bureaucratized process.
  • Devin: AI Software Engineer - comments
  • 5 things I learned while developing a billing system
  • Doing is normally distributed, learning is log-normal
    • Software estimation is challenging because it fails to recognize that learning is non-normally distributed.
  • Readme Driven Development
  • Drift towards danger and the normalization of deviance - systemic migration of organizational behavior toward accident under the influence of pressure toward cost-effectiveness in an aggressive, competing environment
  • ์†Œํ”„ํŠธ์›จ์–ด ํŒŒ๊ดด์˜ ๋ฏธํ•™

    "์†Œํ”„ํŠธ์›จ์–ด ํŒŒ๊ดด์˜ ๋ฏธํ•™"์€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์— ๋‚ด์žฌ๋œ ๋ถˆํ™•์‹ค์„ฑ์„ ํƒ๊ตฌํ•˜๋ฉฐ, ๋Š์ž„์—†์ด ๋ณ€ํ™”ํ•˜๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์†์—์„œ ๊ฐœ๋ฐœ์ž๋“ค์ด ์™„๋ฒฝ์„ ์ถ”๊ตฌํ•˜๋Š” ๊ณผ์ •์—์„œ ์ง๋ฉดํ•˜๋Š” ์–ด๋ ค์›€์„ ๊ฐ•์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ธ€์€ ๊ฐœ๋ฐœ์ž๋“ค์ด ํ’ˆ์งˆ์„ ์œ„ํ•ด ๋…ธ๋ ฅํ•˜์ง€๋งŒ ๋ณต์žกํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ์—ญํ•™์— ์ง๋ฉดํ•˜๋ฉด์„œ ๊ธฐ์ˆ  ๋ถ€์ฑ„๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ณผ์ •์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ Kano ๋ชจ๋ธ์„ ์ฐธ์กฐํ•˜์—ฌ ๊ณ ๊ฐ ๋งŒ์กฑ๋„๊ฐ€ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์–ด๋–ป๊ฒŒ ๋ณ€ํ™”ํ•˜๋Š”์ง€, ํ•œ๋•Œ ๋งค๋ ฅ์ ์ด์—ˆ๋˜ ๊ธฐ๋Šฅ๋“ค์ด ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Œ€์‚ฌํ•ญ์ด ๋˜๋Š” ๊ณผ์ •์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค. ์ด ๊ธ€์€ ์ฝ”๋“œ๊ฐ€ ๊ฒฐ๊ตญ ์‹œ๋Œ€์— ๋’ค์ฒ˜์งˆ ์ˆ˜๋ฐ–์— ์—†๋‹ค๋Š” ์‚ฌ์‹ค์„ ๋ฐ›์•„๋“ค์ด๊ณ , ์ด๋Ÿฌํ•œ ๋ถˆ๊ฐ€ํ”ผ์„ฑ์„ ์˜ˆ์ƒํ•˜๊ณ  ๋ฐ›์•„๋“ค์ด๋Š” ๋งˆ์Œ๊ฐ€์ง์ธ "Destruction-Oriented Development"์˜ ๊ฐœ๋…์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

  • Focus on decisions, not tasks

    In technical communication, we donโ€™t talk much about decision support; we talk about task supportโ€ฆ In many cases, the information people need to complete their tasks is not information on how to operate machines, but information to support their decision makingโ€ฆ simply documenting the procedures is never enoughโ€ฆ What I am talking about is documenting the context, letting users know what decisions they must make, making them aware of the consequences, and, as far as possible, leading them to resources and references that will assist them in deciding what to do. โ€” Every Page Is Page One

re:Work

re:Work is a collection of practices, research, and ideas from Google and others to help you put people first.

  • Goal Setting Set goals to align efforts, communicate objectives, and measure process.
  • Hiring Make better hiring decisions through job descriptions, structured interviewing, hiring committees, and more.
  • Innovation Learn to build the skills for innovation and make it a part of your workplace.
  • Learning & Development Empower your employees to grow and develop by making learning part of everyoneโ€™s job.
  • Managers Identify what makes a great manager and offer feedback and development opportunities.
  • People Analytics Make informed, objective people decisions using science and data.
  • Teams Examine team effectiveness and how to foster psychological safety.
  • Unbiasing Reduce the influence of unconscious bias by educating, measuring, and holding everyone accountable.

Debug

Estimation

Pushing for a lower dev estimate is like negotiating better weather with a meteorologist

The article discusses how stakeholders often push development teams to provide lower estimates than initially given, without valid reasons for why the effort would decrease.

  • Estimates are based on teams' experience and data, not external opinions.
  • Estimates cannot be pushed lower without new information.

The better approach is to have a discussion around budget, uncertainties, and prioritization in order to deliver parts of the feature in a timely manner.

  • Teams are encouraged to ask stakeholders if they would tell a meteorologist their forecast is wrong, highlighting that estimates rely on expertise, not opinions.
  • With open communication around constraints and tradeoffs, teams can set appropriate expectations and deliver value along the way.

Code Assistance

LLMs and Programming in the first days of 2024

The author discusses their extensive use of large language models for programming tasks over the past year. They find LLMs most helpful for writing disposable code, learning new frameworks quickly, and accelerating documentation searches. While useful, LLMs still struggle with system programming problems requiring complex reasoning. The author believes LLMs have begun to show rudimentary reasoning abilities through their interpolation of concepts, but their capabilities are still limited. Overall, they argue LLMs are a valuable tool for programmers that can help focus time on more important problems and skills.

kevindamm

Salient point:

Would I have been able to do it without ChatGPT? Certainly yes, but the most interesting thing is not the fact that it would have taken me longer: the truth is that I wouldn't even have tried, because it wouldn't have been worth it.

This is the true enabling power of LLMs for code assistance -- reducing the activation energy of new tasks enough that they are tackled (and finished) when they otherwise would have been left on the pile of future projects indefinitely.

I think the internet and the open source movement had a similar effect, in that if you did not attempt a project that you had some small interest in, it would only be a matter of time before someone else did enough of a similar problem for you to reuse or repurpose their work, and this led to an explosion of (often useful, or at least usable) applications and libraries.

I agree with the author that LLMs are not by themselves very capable but provide a force multiplier for those with the basic skills and motivation.

nickpsecurity

I had good results by writing my requirements like they were very, high-level code. I told it specifically what to do. Like formal specifications but with no math or logic. I usually defined the classes or data structures, too. Iโ€™d also tell it what libraries to use after getting their names from a previous, exploratory question. From there, Iโ€™d ask it to do one modification at a time to the code. Iโ€™d be very precise. Iโ€™d give it only my definitions and just the function I wanted it to modify. It would screw things up whereby Iโ€™d tell it that. It would fix its errors, break working code with hallucinations, and so on. You need to be able to spot these problems to know when to stop asking it about a given function.

I was able to use ChatGPT 3.5 for most development. GPT 4 was better for work needed high creativity or lower hallucinations. I wrote whole programs with it that were immensely useful, including a HN proxy for mobile. Eventually, ChatGPT got really dumb while outputting less and less code. It even told me to hire someone several times (?!). That GPT-3-Davinci helped a lot suggests itโ€™s their fine-tuning and system prompt causing problems (eg for safety).

The original methods I suggested should work, though. You want to use a huge, code-optimized model for creativity or hard stuff, though. Those for iteration, review, etc can be cheaper.


Children
  1. AI
  2. Advice for new software devs who've read all those other advice essays
  3. Algorithms we develop software by
  4. Auth
  5. Back End
  6. Bdd in 2020
  7. Best Practices
  8. Building Software Together
  9. CLI
  10. CSS
  11. Code Review
  12. DB
  13. Dev Tools
  14. Devops
  15. Etc
  16. Functional Programming
  17. Fundamental Math for Game Developers
  18. Git
  19. Greppability is an underrated code metric
  20. HTML
  21. Hardware
  22. Infrastructure
  23. Inside ECMAScript: JavaScript Standard Gets an Extra Stage
  24. Interesting
  25. Interview
  26. JavaScript
  27. Journal
  28. Learning at Work
  29. Management
  30. Miscellaneous
  31. Network
  32. PHP
  33. Practices of Reliable Software Design
  34. Privacy
  35. Program Languages
  36. Pronunciation guide for UNIX
  37. Python
  38. Reading List
  39. Regex
  40. Rust
  41. SaaS Payment vs. SaaS Billing - What Those Terms Mean and What the Differences Are
  42. Security
  43. Side Project
  44. Software Engineering
  45. Team
  46. Terminology
  47. Test
  48. The Rise of Worse is Better
  49. To Fork
  50. To Read List
  51. Topcat's System Design Template
  52. TypeScript
  53. UX
  54. Virtualize
  55. Web
  56. What to Blog About
  57. Why Not Comments
  58. With AI
  59. You should separate your billing from entitlements
  60. ๐Ÿฆ‘ The 14 pains of building your own billing system