HNHacker News
TopNewBestAskShowJobs

externalreality

415 karma · joined June 1, 2015

submissionscomments
externalreality··on How not to hire a software engineer
I would argue that what makes code "good" is completely subjective which is why I don't spend too much time thinking about it.

The only criteria I have for good code these days is "Does it work", "Can I understand it". Everything else is a good IDE's command away for being willed into reality. So I really don't spend too much time on the "good" code debate like I did as a teen reading "Clean Code" and GOF books. I actually wish I could have that time back, I would have read, in their place, books on type theory and OS design, Posix, in other words things that actually help me build stuff and get things done and that I subsequently had to read later. Undo the damage done by the "good code" people that have me thinking about stuff that nobody cares about. Take a month off, read a book on game design in opengl, and write a cool robot simulation or something and remember how much more gratifying that is than writing a small do-nothing program just to try out some useless design pattern that doesn't scale beyond micro-examples.

There is so much varying lit out there on how to write good code that I am surprised that I am surprised if even 2 programmers can truly agree on what good code is. So Again, I'll say that "good" when it comes to code should be equivalent to "easy to understand" and "does the flow of text match the flow of program execution" in other words "is it easy to understand given I am familiar with the problem domain".

externalreality··on How not to hire a software engineer
I wish everyone thought that way but they don't. In today's rapid paced world if you don't know Rails (not even Ruby) but Rails, for example, and we're using it - then you ain't in... and here write this 8 hour code test so we can subjectively judge it because grading code tests to see if you don't put logic in your controllers make our egos hum.
externalreality··on How not to hire a software engineer
All the things most programmers do these days are pretty mundane and the only thing you need to ascertain is if they are familiar with the technologies that are being used. "Can you show you know sufficient SQL? Did you write applications before using Rails/Django what have you? Distributed this, Web that - OK, jobs is yours." After all that the productivity of the programmer is solely based on the work environment and how motivated you can keep a developer who is becoming depressingly convinced that his calling in life is to write web handlers and optimize queries to a bloated database schema and watch the guy whose been on the job too long walk around like he's some fusion of John Carmack and Elon Musk.

Why these interview processes act as if candidates are going to be designing graphics engines from scratch for graphics hardware extracted fr om a downed alien spacecraftis beyond me. We just really be testing their ability to sort through a bunch of legacy OOP designed by people who are so board with the project domain that made of bunch of bad abstractions and used every new OOD technique in the books when a handful few procedural functions would have sufficed.

externalreality··on The Programming Language Conundrum
> A lot has been written about "hyperproductive teams". ... there’s one thing in common between all the stories I’ve heard and the successes experienced first hand: small teams

Funny because I don't think its small teams or a particular programming language that leads to great productivity. You don't have to look very far or far back to see teams, of various sizes, pulling off some amazing stuff with assembler and C. The key to productivity is a lot simpler, and independent of software development. Its a sense of responsibility, interest, and dedication.

In a small team that is using small talk the responsibility might come from being on a small team with a lot of lifting to do, the interest might come from having fun using a language that you like (regardless of the language), and the dedication might come from the promise of getting in early on a promising venture - hence the small team. All of these things add up to hyper-production.

If you can establish those three things, somehow, with a large team I don't see why hyper-production can't be achieved. Unfortunately modern project management for large teams seems to rely heavily on techniques that rob developers of all three qualities mentioned above in the name of so called "agile" and in pursuit of some fictitious software assembly line.

externalreality··on How many times has a unittest saved your day?
I agree most of the time I am just fixing silly issues like this mock is now broken because I added a method or a field or the like - or some beefy test setup code is now broken because of some otherwise innocuous change. I do believe high-level functional/acceptance tests are important however, that is, tests that check whether the various programs that make up the system actually do what they are meant to do. For example a CLI test for a program that interfaces with the user from the CLI. If a program is writing to storage, check to see if it actually writing to the storage properly. All the little mocks and stubs and so forth seem to be to form a false sense of security.

Those who are in favor of unit tests have one big weapon on their side of the argument and that is simply the word "test" "how can a test be bad?, right?"

externalreality··on Your Job Isn't Writing Code
I like this article. I think it has been stated many time before in many different articles and books and is mostly common knowledge now. So I think we need some meta principles:

1) Don't think you are the only one who understands these principles and realize people are going to have differing opinions on what is the simplest thing that can be done.

2) Just because you don't understand it doesn't make it complicated. If you don't understand something another is talking about try to reserve your judgement as to how simple (or not simple) it is until you actually understand what is being said.

3) Don't over do it with this advice. Sometimes you need to add a bit of complication to make the big picture easier. "A thing should be as simple or as complicated as it needs to be nothing more".

externalreality··on How to quickly and effectively read other people’s code – Self-Taught Coders
Assuming you are familiar with all relevant languages/frameworks involved then reading other people's code is not hard at all if 1) you understand the purpose of the portion of the code base you are in 2) you understand design/architecture of that portion of the code base and 3) You ask for a quick overview from someone.

Yes, sometimes code is loaded with all kinds of indirection that usually comes from OO programmers outsmarting themselves with all kinds of implicit polymorphic dispatch and unnecessary design pattern legacy. This is why its important to ask someone familiar with the code to give you a rundown.

externalreality··on American Employers Are Hung Up on Hiring PhDs
The question is: Is a PhD more likely to have the skills necessary to do the job I need them to do? In my experience the answer is, all else on a resume being equal, "Yes". Some one with more training and familiarity with research roles should be given the shot. Also I agree with others in that PhDs are really good at throwing something workable together. In my experience throwing something workable together is all we do in tech.
externalreality··on Learning from Code vs. Plagiarism
If you are going to be looking at code a lot more than you are going to be writing it. In most cases you will be looking at code in attempt to ascertain a larger pattern that is being used in a code base so you can follow suite. Looking at code to see how a library is actually used will be the least (very least) of your worries and will become super second nature.
externalreality··on The Action Pattern: Clean, Obvious, Testable Code
I think the article was nice. I really would have liked a more concrete definition of the pattern and earlier in the article. I think the most important part of the article for me was:

1) Centralize all of our calls to other code in one place. 2) Share response values from each step with other steps. 3) Clearly delineate the order of steps in our code. 4) Make our code more maintainable and extensible by avoiding nested spaghetti code.

I think test code should be the clearest, easiest, most lucid code. Even at the expense of code that in other contexts may be considered boilerplate or redundant. Test code serves a different purpose than production code and is made to be rapidly modified, quickly and dirtily refactored, and very easy to understand, and to be exceedingly clear as to what cases it is actually performing a run-time test on. Often I see authors writing test code as if the test code itself is built to be maintained and reused. In some cases that is true but generally not when actively developing a system.

externalreality··on Pyright: Static type checker for Python
This has gotten silly.
externalreality··on Pyright: Static type checker for Python
> They don't have time to read and understand code.

Where does it say that. It actually says the opposite quite clearly if you cared to post the whole quote and not just what supports what you would like it to.

> They addressed one of the issues with a compile step, eg slower feedback loop.

Can you explain to me how faster feedback from static types that they, a concept which the article reiterates again and again, leads to a slower feedback loop. Clearly the article and many more like it say that the feedback loop actually speeds up with static analysis since you don't have to run the code to get the feedback.

I'm not sure if you actually want to objectively reason.

externalreality··on Plutus Pub-Sub: A Way to Communicate Using Cardano and Plutus Smart Contracts
cool
externalreality··on Show HN: The Legend of Trykon, a 3D Zelda-like exploration/puzzle game
Nice, fun. Looks well crafted. Thank you for sharing.
externalreality··on Random Thoughts on the Admissions Scandal
> 1) Your kid likes (1) helping the homeless and (2) Ramsey Theory and (3) helping the homeless learn Ramsey Theory.

Bad form sir, bad form.

externalreality··on Pyright: Static type checker for Python
A type system is not a replacement for understanding. Where ever did you get that idea? The annotations help you to understand the code, they don't make it so you don't have to understand it.

I'd say python is about as popular as Java and so I don't see companies investing a bunch of money to make Java programmers more comfortable when they could just hire an army of Python developers if they wanted to. I just think they see value in the static analysis that types provide. Read about why Facebook added types to PHP they don't mention your hypothesis.

I don't mind programming in languages with dynamic type systems. I find it just as fun. But I do think its easier when there is a way to easily keep track of the type of thing being operated on. I mean the data is what is actually being operated on, the more I can tell about the data from reading the code the better. The most difficult systems I have ever worked on were the ones where unshaped globs of data were being shuffled around in hash tables and heterogeneous sequences. I would always have to use the debugger to find out what was going on at a given point. The code was dispatching on value and type. It was rough.

externalreality··on Pyright: Static type checker for Python
I don't know if any of that is true. The annotations actually help me to understand the code. I actually find it easy to rewrite and iterate with type annotations which are like machine checked comments. I think the purpose of the tool is to make it harder to write "bad" code, unless you mean "bad" in the aesthetic sense then I can't see how that is true either. In general I find it easier to write code since its easier to keep track of what the data looks like.

What do you mean by interfaces?

But then this is an argument that I don't have much time for and too much time has been spent on it already. Lets just say that if there are many major companies that felt the need to invest in a type system for a popular languages that don't have one, then there might be something too it.

externalreality··on Pyright: Static type checker for Python
I think this is great! Static typing is such a blessing. This one looks very high quality. Static typing helps me read code and helps the compiler do static analysis. What's not to like?
externalreality··on Did Big Tech Get Too Big? More of the World Is Asking
I can see more innovation if big tech were broken up. Right now I think technology is in a stasis funk compared to the last 10 - 15 years. What's next a smart phone with 3 cameras that folds in a predetermined fashion - yawn. We need more innovation.
externalreality··on A world of message-oriented programming languages (2018)
Nice article! In order to "pass messages" you have to have two things and one has to send a message to another - or one thing passing messages to itself. So if you have a function and it reads in data off the program stack from another function that is a form of message passing. I guess anything can be seen as message passing. Today however, when I think of message passing it usually in the contexts of threads or otherwise sequential processes communicating and not a single process sending messages to different segments of program code - and yet, as the article states, that is a perfectly legit way to think about it.
externalreality··on [dead]
Sure, because banning assault riffles is going to stem the hate. I applaud the effort but the assault riffle didn't become sentient and start attacking people. It took a hateful group of people to carry out these attacks. If we were talking about an Islamic extremist attack there would be far less pivoting to a discussion on gun control. In short, no hate = no attacks; no weapons then maybe it will be a bit harder but there will still be plenty attacks.

I am pro gun control but it is a little known fact that gun control was quite strict in 1930s Germany during the rise of the Nazi party. The point is that hate leads to mass death not weapons. If it wasn't an assault rifle it would have been a series of home made explosives and small arms, or 3D printed weapons, or a gang with swords and bats blocking exits. Stop the hate, don't pivot.

The New Zealand government should mandate anti-bias, anti-hate, diversity training for all government and private employees. Once per year, since there is virtually no education on the topic. Many people get bitter when they hare to take such training. I mean would the government let people get into a car without any training but people are allowed to hurt other with their bias and bigotry. Its a fact it happens. So why not try to stem it. Instead we pivot to gun control as if that is going to remove all hate and stop the problem.

externalreality··on Gall's Law
There is only one system that doesn't abide by this law. That is the cosmos including the quantum cosmos. All at once all the complexity in the universe came into being. Basically its safe to say that "everything" disobeys this law.
externalreality··on Coding Driven Leadership
> Collective Ownership : It’s not about you, its always about the team.

When people say "Collective Ownership", they usually mean no one person is directly responsible for a body of code - and that is supposed to be a good thing. When you walk into a shop with this philosophy and have a question about the code you will find that you usually get the answer "I don't know ask Jake" and then Jake says "I don't know ask Jane", Jane then sends you to Bill who may have touched the relevant code at some point. Basically "Collective Ownership" can result in lack of responsibility and messy code that nobody really understands.

I want to take more aim at this "Collective Code Ownership" myth. The concept overlooks the immense amount of job satisfaction one gets from being responsible for a body of code and feeling like you have some responsibility. Handing out responsibility doesn't remove the need for code reviews or bar others from examining and learning different parts of the code. So called "collective ownership" simply gives low-level engineering management more power by keeping developers weak and replaceable but makes for messy code. It makes for messy code because developers don't take a holistic view of what they are doing they just strive to rapidly complete little tasks that are thrown in front of them that management can understand and use to maintain a feeling of control. In short "yes!", it is about you, your growth, and your job satisfaction. I've worked as a consultant in many code shops - when I walk into a shop and the manager introduces Alice "who does our kernel code", and then Bill who "Manages our API code", and Mike "Who is generally responsible for integrations and works on our front end code with Alice" I generally see more happy developers and less turnover.

I also don't believe very much in Pair Programming. Again, all the research I've read supporting the practice is questionable. I've pair programmed at length and watched others do it. Generally it only works for the most trivial of tasks - which means that why use it at all. I do think superiors get a great deal of satisfaction pairing with their subordinates, I'm not so sure about the other way around.

externalreality··on Ask HN: What's your vision of everyday tech 50 years from now?
My vision of the future of technology is one where old technology is reused, and recycled. I wouldn't mind using repurposed 50 year old storage devices if they still work. I would love to see interface tech that allows me to use 30 year old salvaged monitors.

From a software perspective, I would imaging that computers would do a lot more to help validate the intentions of human programmers and that computers will do a lot of the programming themselves.

I would like to see almost all tech powered by renewable sources.

Material science - plastic and other horrible materials should be done away with. I actually think we have gone backwards with respect to materials producing virtually indestructible waste material that poisons our water and air.

externalreality··on Object-Oriented Programming Is Good
A youtube commented said the following:

"This approach is used within haskell 1 to 1."

He is correct.

I would go further and say the author of the video is just talking about "good programming" in general.

... but if you mentioned any of this at work you would get drummed out of the office with a yellow stripe down your back.

externalreality··on Types Are Moving to the Right
https://www.reddit.com/r/haskell/comments/ngn2c/a_concept_fo...

I would still consider the link above editing text... but I posted it anyway for what it is worth.

The idea seems to be to confine the text to its AST in a form like fashion.

externalreality··on A Monolith Architecture Can Be Transformed into Serverless
Here's a good article on the topic from a few years ago: https://thenewstack.io/continuum-containers-unikernels-serve.... The most concrete definition of serverless I can find relates to platforms that do not provision machines that you pay for but instead serverless environments abstract away the machine and you only pay for the resources your applications uses. That definition does not exclude uni-kernels in the least. The reason why Unikernels are good for this is because they are a way to ensure that your application is housed in a way that guarantees it will run without much thought given to the concerns the article states - and with an absolute minimum of overhead. I wouldn't be surprised if serverless is or will be implemented with unikernels. https://medium.com/solo-io/unik-is-here-to-help-bring-aws-fi...
externalreality··on Cloud Management with Prolog
I like the idea. An easy way to get resource graphs into an environment that is good at querying such things. I seen a few ideas start this way. They always seem to get to certain point before the two domains (in this case AWS configuration and Prolog) have to work so closely that another tool entirely has to be created (basically a config language close to Prolog but geared toward the problem domain). I am surprised something like this doesn't already exist.
externalreality··on A Monolith Architecture Can Be Transformed into Serverless
The title of the article is "How a Monolith Architecture" but a good portion of the article describes considerations to take when moving services that seem not to be apart of the a monolith to a server-less cloud provider.

It seems that much of the advice centers around chopping up the monolith into services that can be run on a server-less cloud platform.

Uni-kernels, their promise of boot on demand and extremely small footprint, may help with a lot of this. In the very, very, near future devs will be able to package monoliths in ultra light-weight OS's that boot on demand and are optimized for the running application - and do all this on server-less cloud platforms without having to worry all that much.

I'd wager that in 2-3 years many of the use cases of containers will be replaced by Unikernel tech and the desire to run on serverless cloud platforms will be one very big use case.

externalreality··on The Problems in Remote Working
I have been seeing more and more articles of this type popping up, from formal academic articles to semi-formal articles in Harvard BR to informal articles such as this one - all asking the same question. I think that none of the problems stated in the article are symptoms endemic to remote working. For some demographics remote working is a real boon (e.g. introverts or groups that may find that they are mistreated in a largely white male dominated brick & mortar environment). In short I think much research has to be done in order to come to any concrete conclusions. We wouldn't want the final say on the pros and cons of remote work to be dictated by pop culture or social media opinions.
← PreviousPage 5 of 7Next →