Post ATshP2cd7gESo9mOS8 by mike@sauropods.win
 (DIR) More posts by mike@sauropods.win
 (DIR) Post #ATscXBDMYota0F1SHA by spolsky@blackrock.city
       2023-03-22T16:58:12Z
       
       0 likes, 0 repeats
       
       In a world where developers can get a lot of help from Copilot, ChatGPT, StackOverflow, etc., there are still certain coding skills that characterize the best software developers. As just one example, real developers use data types in a way that makes their code cleaner and more reliable -- they define types like "heightInCm" or "widthInPixels" instead of floats and ints, and suddenly code is 10x easier to reason about.In your opinion, what are some other hallmarks of top 1% developers?
       
 (DIR) Post #ATsdPA2R9LstzaeUQS by snaggen@mastodon.nu
       2023-03-22T17:07:23Z
       
       0 likes, 0 repeats
       
       @spolsky Finding the balance between abstractions and factory madness/boilerplate. Another is good error handling, and reporting.
       
 (DIR) Post #ATse4IDbdnz5EfUPrc by mike@sauropods.win
       2023-03-22T17:15:24Z
       
       0 likes, 0 repeats
       
       @spolsky Interesting. Do you think heightInCm and widthInCm are two separate types? I am more inclined to think you want one type, distanceInCm, and two variables of that type, height and width.
       
 (DIR) Post #ATsgAmNwavBqRSXu9Q by spolsky@blackrock.city
       2023-03-22T17:39:09Z
       
       0 likes, 0 repeats
       
       @mike Maybe - depends on the scenario - I try to use different types when assigning from one to the other is always an error.
       
 (DIR) Post #ATshP2cd7gESo9mOS8 by mike@sauropods.win
       2023-03-22T17:52:35Z
       
       0 likes, 0 repeats
       
       @spolsky Solid heuristic.
       
 (DIR) Post #ATshfkxM3aNowRRZaa by jkaniarz@mastodon.gamedev.place
       2023-03-22T17:55:32Z
       
       0 likes, 0 repeats
       
       @spolsky I stole this from someone else and it pairs nicely with tagged types: use XfromY() instead of YtoX(). That aligns the types in the name of the function with the types of the parameter and return. varInKm= kmFromCm(varInCm)The two “km” are touching.
       
 (DIR) Post #ATshqUtU7J0sJIkt1M by notCalle@mstdn.social
       2023-03-22T17:56:34Z
       
       0 likes, 0 repeats
       
       @spolsky Carefully crafted commits with commit messages that tell the story of why this code happened. The code will change, but the commit history is forever.
       
 (DIR) Post #ATsi89S2Zwgr1HKvlg by cassiozen@hachyderm.io
       2023-03-22T18:00:49Z
       
       0 likes, 0 repeats
       
       @spolsky They care for the API they’re exposing in their classes/components/packages: from naming to consistency to conciseness.
       
 (DIR) Post #ATsjK9147dDp6E0AhE by JasonPunyon@fosstodon.org
       2023-03-22T18:13:46Z
       
       0 likes, 0 repeats
       
       @spolsky they're picky about their dependencies.
       
 (DIR) Post #ATso6HEhGPJgJFaIwy by mrysav@social.linux.pizza
       2023-03-22T19:07:48Z
       
       0 likes, 0 repeats
       
       @spolsky Any code is testable if you have an AI that can generate a test of arbitrary complexity, but writing code that is testable in a way where you can also easily understand the test is an art!
       
 (DIR) Post #ATstHVOvRFElCJXgvY by programmer01135@hachyderm.io
       2023-03-22T20:04:47Z
       
       0 likes, 0 repeats
       
       @spolsky being able to decipher BA gobbedlygook to usable technical requirements and translate that to good architecture
       
 (DIR) Post #ATsuSQvWVubyScZ3uS by kboyd@phpc.social
       2023-03-22T20:19:03Z
       
       0 likes, 0 repeats
       
       @spolsky providing advice that appeals to others on the facts - using inclusive, friendly, and collaborative language.
       
 (DIR) Post #ATsx5LLdOCk0MOSWq8 by KirillOsenkov@mastodon.social
       2023-03-22T20:48:16Z
       
       0 likes, 0 repeats
       
       @spolsky fixing what's broken as a priority, routinely paying off technical debt and fighting entropy
       
 (DIR) Post #ATsxPXQuAQsDdIYPsO by kkolakowski@mastodon.social
       2023-03-22T20:52:25Z
       
       0 likes, 0 repeats
       
       @spolsky Keeping code close to its place of use, using DRY but not fanatically, writing code first for humans - not for computers, not using high-level abstractions that even you won't fully understand a week later, do not over-engineer and last but not least: KISS 😚
       
 (DIR) Post #ATsxbeMGFIOEaN9oP2 by rich@civilians.social
       2023-03-22T20:53:25Z
       
       0 likes, 0 repeats
       
       @spolsky Parity matching the complexity of the architecture to complexity of the application. I've lost count of the number of times I've seen essentially, data collection web forms with heavyweight dependency injection framework. Sometimes a homebrew one. It's the middle stage of developer maturity - using trendy patterns because you know how, not because you need it.
       
 (DIR) Post #ATsyHJgRVGJ4cxStyC by ted@social.foolish.computer
       2023-03-22T21:01:39Z
       
       0 likes, 0 repeats
       
       @spolsky I think understanding where a project is heading in terms of added features and being able to futureproof is really important. Basically being able to anticipate when/what abstractions, frameworks, patterns, etc. will be necessary in the future.
       
 (DIR) Post #ATszeqtEJEU8EHEUds by bitbonk@mastodon.social
       2023-03-22T21:17:12Z
       
       0 likes, 0 repeats
       
       @spolsky Being able to identify what the customer actually needs, what is important and what isn’t and being able to focus on that in the code.
       
 (DIR) Post #ATt0BADhyW0tRpDd9E by ericlippert@hachyderm.io
       2023-03-22T21:23:16Z
       
       0 likes, 0 repeats
       
       @spolsky all people who write code are "real developers". A characteristic of professional developers I know we both appreciate is habitual use of specifications. Without a spec, how do you know when the code is right? Or when it's done?
       
 (DIR) Post #ATt0LhUz6IplYVK9Ee by CanIntoSpace@mastodon.social
       2023-03-22T21:25:09Z
       
       0 likes, 0 repeats
       
       @spolsky I don't know about if it's about being a great programmer, but I love using type aliases for other classes or tuples, so the code may be more readable
       
 (DIR) Post #ATt2Jr3ulzWEXquTZo by jfrench@cupoftea.social
       2023-03-22T21:47:06Z
       
       0 likes, 0 repeats
       
       @spolsky it's not an artifact you can see. Being able to read code and understand it is a good steo, but being able to read diffs, not just in terms of the line changes but to understand what changed, how it will impact other parts of the files that changed and how a bug could have been introduced is something that takes time to get. I think it is a skill that senior Devs take for granted but if you are taking to a mid or junior you really need to point out what is happening even then they struggle.
       
 (DIR) Post #ATt2fA9azByhq0jAKe by michiel@crispsandwi.ch
       2023-03-22T21:51:03Z
       
       0 likes, 0 repeats
       
       @spolsky telling people 'no'...AI will just take your bad idea and run with it.
       
 (DIR) Post #ATt2wE4BgwIUtcKmn2 by ratkins@mastodon.social
       2023-03-22T21:54:13Z
       
       0 likes, 0 repeats
       
       @spolsky Knowing that complexity is the enemy and Gall’s Law is your gospel.
       
 (DIR) Post #ATt36zDTFF2i1Yo7MW by n3wjack@mastodon.social
       2023-03-22T21:55:13Z
       
       0 likes, 0 repeats
       
       @spolsky error messages that tell you what is wrong, and how you can fix the problem.
       
 (DIR) Post #ATt3HvW1LQjjjQhVPE by gerbrand@fosstodon.org
       2023-03-22T21:56:38Z
       
       0 likes, 0 repeats
       
       @spolsky being able to reproduce most/all problem on your local dev environment.Lesser experienced developers painfully deploy, try manually, or just wait many times per day while with some effort they could simulate whatever bug they try to fix in a unit test.
       
 (DIR) Post #ATt63tjTTcfk0gzndI by dan@toot.pizza
       2023-03-22T22:29:08Z
       
       0 likes, 0 repeats
       
       @spolsky clean API surfaces on every internal object.
       
 (DIR) Post #ATtAcVviMjjG8jTzNI by JaredCrookston@mas.to
       2023-03-22T23:19:42Z
       
       0 likes, 0 repeats
       
       @spolsky kind of cracking me up that this and lots of the responses are essentially rewriting your 2005 blog post about making wrong code look wrong. (And that's not a bad thing, I still point some new fresh out of college developers I work with to it.)
       
 (DIR) Post #ATtDTS9rJtE1hKTBRI by spolsky@blackrock.city
       2023-03-22T23:52:12Z
       
       0 likes, 0 repeats
       
       @JaredCrookston yep! Although - as the tools (compilers and linters and unit tests) have gotten better, it’s less important to specifically make wrong code look wrong, and more important to generally just make the dang code look like it’s doing what it’s meant to be doing
       
 (DIR) Post #ATtR1N3M6Z4p7Cvncm by jbaert@mastodon.social
       2023-03-23T02:23:53Z
       
       0 likes, 0 repeats
       
       @spolsky not trying to outsmart the compiler
       
 (DIR) Post #ATtVmD33WIUdVrNg3c by ewanbenson@mastodon.social
       2023-03-23T03:17:02Z
       
       0 likes, 0 repeats
       
       @spolskyTabs
       
 (DIR) Post #ATteDW6lYyiE4teGps by jaanus@mastodon.justtact.com
       2023-03-23T04:51:45Z
       
       0 likes, 0 repeats
       
       @spolsky giving your pull request or merge request an accurate but short description, so someone without all surrounding context can glance at it and quickly understand what it is about.
       
 (DIR) Post #ATtqDV0GryNC6MMuFE by brightpavilions@sfba.social
       2023-03-23T07:05:44Z
       
       0 likes, 0 repeats
       
       @spolsky The ability to do more than just code. Communication, empathy, product understanding.
       
 (DIR) Post #ATulgsZvzW2v0JCRxw by joeri_s@mstdn.social
       2023-03-23T17:49:56Z
       
       0 likes, 0 repeats
       
       @spolsky knowing when to explain to the customer that their problem can be solved without more code; in short knowing when programming is not the answer
       
 (DIR) Post #ATulriJAW5vSKuWY88 by spolsky@blackrock.city
       2023-03-23T17:50:59Z
       
       0 likes, 0 repeats
       
       @jbaert How do you mean? like, premature optimization that the compiler will do anyway?
       
 (DIR) Post #ATum3Jda4GTFIQbVGi by spolsky@blackrock.city
       2023-03-23T17:53:45Z
       
       0 likes, 0 repeats
       
       @dan Sure... but what makes them clean? Non-leaky?
       
 (DIR) Post #ATv3ULSh5iFZzgzCYy by dan@toot.pizza
       2023-03-23T21:09:41Z
       
       0 likes, 0 repeats
       
       @spolsky well a lot certainly has to do with just naming things well as you said. Other things I can think of - proper getters and setters. And as the great Colin Moock once said “if your function is longer than like 5 lines, you probably should have 2 functions”Other thing is just following the language conventions. As I’ve learned Swift in the past few months, there’s def a Swifty way of doing things such as accepting variables and using modifiers correctly.
       
 (DIR) Post #ATxKVQhE4CgVAWG6SW by jbaert@mastodon.social
       2023-03-24T13:29:33Z
       
       0 likes, 0 repeats
       
       @spolsky Yes, and in the process inadvertedly making things *harder* for the compiler.
       
 (DIR) Post #AUBV4GVrBhCwhi4zsu by cyx37@mastodon.scot
       2023-03-31T19:33:36Z
       
       0 likes, 0 repeats
       
       @spolsky Approaching debugging and problem solving with the scientific method: attempt to disprove your theory/assumptions before acting on them. Learning this has saved me countless hours of work.https://www.youtube.com/watch?v=vKA4w2O61Xo
       
 (DIR) Post #AUD3WONP8SIunhfZD6 by pico@universeodon.com
       2023-04-01T13:34:42Z
       
       0 likes, 0 repeats
       
       @spolsky not exactly a single dev trait but what about code review and/or refactoring? being willing to submit to that...would it be a blow to one's ego as a dev?