HN user

dwoot

91 karma
Posts3
Comments46
View on HN

I mean, your points are pretty subjective.

You've also extrapolated your anecdotes to make a sweeping statement that implies that all FP is spaghetti.

You've made no objective counterpoints. Reducing any platform or language to "bad" sounds like someone that never quite understood the benefits of FP. Imperative languages are no silver bullet. Literally every code base that I'd ever worked in exhibits the same issues you describe as "spaghetti". But how does FP make it more so?

Do you write unit tests? Tell me how you've not come across a codebase in a non-FP language that didn't require some insane fixture or factory or set-up code and it was insanely difficult to reason about because you had to invoke methods in a particular order to set an object up to be tested for a particular scenario. This is not the case with functional languages. You don't get the rug pulled out from under you very often and if so, it's typically centralized in the "actor" or process whose state can change whereas state is EVERYWHERE in most imperative languages and even challenging at times to introspect, especially when encapsulation is done right in some languages.

Just because you've written more detailed points does not mean that they're valid or good. It just means that you have thoughts.

If you've asked people to send you good projects, then you're already in a mental state that disallows you from accepting a good project. There are many. Don't ask, just search on GitHub -- many projects that don't even come from core devs. It's been much easier for me to reason about and push fixes to these projects compared to Ruby or JavaScript projects.

I mean, we get it. You hate Elixir and you hate FP. You're entitled to that opinion, but please don't tell others to stop using it without having worked with it heavily and an accepting mentality to dig beyond the surface.

This is a fair thought. It's why some wonder why people use Vim, emacs, or keyboard shortcuts in general...

However, one of my reasons is that I work out of coffee shops a lot. Not having to bring an extra piece of hardware that takes up space is a big deal for me and not taking my hands off the keys is a big deal.

I was a gamer (Counter-strike), and as precise as I believe my mouse-clicking to be, it is far less precise than the correct sequence of keystrokes to get to some parts...

Readline shortcuts available in most shells, i.e., ctrl-a (beginning of line), ctrl-e (end of line), meta-b (back a word), meta-f (forward a word).

In Vim - I can delete entire code-blocks with a quick sequence and have my cursor ready to type, and I can move chunks of code with their delimiters far more easily than my fairly precise mouse clicking and highlighting then moving my hand back to the keyboard to hit backspace. I can also switch to a "tab" (buffer in Vim) with a few keys without having to cycle through tabs or use a mouse to find the tab I'm looking for with a mouse.

There are many benefits, it's why even though text editors have come so far, people still continue to write Vim plugins for them -- think VS Code, Atom, and all the IDEs that Jetbrains produces...

Richie -- absolutely absolutely stunning and incredible!

I thought I was making strides. I've taken two BradfieldCS courses and have had some personal mentoring from Myles even before Bradfield was born.

If the original question asker is reading this thread, I can lend some more insight having done MOOCs and Bradfield.

First off, Oz and Myles are behind teachyourselfcs.com, one exceptional and concise site which their curriculum is sort of based off of. Oz is also the author behind, "You Are Not Google" that was HUGELY popular on here a couple years back.

The thing that Oz and Myles brought was their incredible enthusiasm coupled with their passion for mathematics and computer science. They were practitioners teaching at it from a practitioner's perspective with the goal of providing another practitioner the CS most applicable to their jobs. These courses were in-person in San Francisco for a while (but no longer). Look up either Myles or Oz on Twitter and you'll notice that they're very much still engaged in technical conversations and the computer science and how to teach it today.

The one thing I always always took away from the teachyourselfcs.com site is the section under, "Why learn computer science?"

There are 2 types of software engineer: those who understand computer science well enough to do challenging, innovative work, and those who just get by because they’re familiar with a few high level tools.

Both call themselves software engineers, and both tend to earn similar salaries in their early careers. But Type 1 engineers progress toward more fulfilling and well-remunerated work over time, whether that’s valuable commercial work or breakthrough open-source projects, technical leadership or high-quality individual contributions.

I have an inkling that Richie, right here, is EXACTLY what they were talking about when drafting this. This blog post exemplifies this.

I've learned so much from the both of them, but I can honestly say, Richie, if you're reading this, this was a f*ckin' gem! Would love to grab coffee with you some time once the pandemic's over.

Designing new syntax As in a DSL?

It felt like each library had its own idioms and syntax rules This sounds like the way software should be. No? Domain-driven design? Or are you saying that they don't follow industry nomenclature?

It was hard to have consistent architectural patterns across a team Is this a symptom of everyone being new the language on the team or the language itself? Elixir is a very simple language compared to Python and Ruby in my experience. There are certainly way more people that have done the latter two. What's comfortable isn't always better.

I'm wondering how aware of the trade-offs you are in using an imperative language as compared to one that's functional. If the nitpick/gripe you're having is around readability and syntax, I'm sure there are enough counters in other languages that you've worked with where the code was just spaghetti and hardly testable

Have you considered that productivity comes more with time? I get the sense that you've worked in a team with very few experienced developers that have either worked with Elixir/Erlang or functional languages. My experience has been that those with extensive experience in OO or imperative languages w/o ever treading into FP have had a much harder time adopting Elixir and it has resulted in slower development early on, but those willing to learn, march much faster after ramp-up.

But if you value correctness, less bugs, and easily testable code, it's hard to beat functional languages in this area, and I'm not even talking about just Elixir

I've seen an elixir/phoenix backend rewritten completely in python/django and it was a big improvement in developer productivity. Is this really a better idea? If you're mentioning "consistency enforcement", why not use Golang? Elixir also has a formatter built into its toolchain.

Take my responses with a grain of salt -- because if you're just doing a CRUD app and not buying into what the BEAM gives you from an operational perspective, it's probably not that worthwhile?

Recently started my journey with Rust having worked with Elixir in production for about two years, but I keep an ear out on Rust and Elixir/Erlang development

My question: are you familiar with the Lumen project? https://github.com/lumen/lumen#about. Both projects appear to have some overlap. Secondly, what, if any, will be the primary differentiators here? (I've not looked at either projects in too much detail)

One of its creators, Paul Schoenfelder (Bitwalker), you're probably familiar with as he's authored a few popular libraries in Elixir and the other core developer, Luke Imhoff, is ensuring that WASM is taking players like Elixir/Erlang into account being a part of one of the organizations or committees if I recall correctly

Like someone else had mentioned, the list is comprised of channels geared heavily at web development featuring content for early career developers.

There are a ton of channels that dig deeper in more general software and particulars: 1. Algorithms Live! for those that are into competitive programming

2. PapersWeLove for those that are into white papers and the research that underpins some of the systems that we use today

3. 3Blue1Brown for mathematics

4. ThePrimeagen for Vim and other software things

5. Gaurav Sen for digestible chunks of system design components

6. code_report for just programming. The author is going through Structure and Interpretation of Computer Programs (SICP) at the moment

7. commaaai archive for following George Hotz, founder and creator of comma.ai, a self-driving car company. He was a former Googler working on zero days (security)

8. Jon Gjengset for Rust. He's got a lot of great videos as an open-source contributor in Rust projects and was most recently at MIT doing his PhD

9. Bitwise is a bit old (last post was a year ago), but former Oculus lead dev teaching folks about compilers, simulators, FPGA-based hardware, and other low level topics from a practitioner

10. Two Minute Papers for quick high level hits/overviews of whitepapers

11. Engineer Man for great short introductions into various parts of the stack, scripting, Unix, and other abstractions

There are many more and recorded streams from other programmers teaching random things. There are tons of engineers on Twitch representing a multitude of companies like Lyft, CockroachDB, Netflix, and others working on open-source projects.

As a more experienced developer, I much prefer these channels over the ones listed, but my point is that the content is there when people actually search. The YouTube algos may not pick up all of them immediately and is most certainly more dominated by content directed at less experienced devs, but I much prefer some of this to the course recommendations that others are stating. Courses are really good, once you're convinced you want to do a deep dive into something, but most people do not finish MOOCs.

I think having a choice of being on-prem and/or completely remote is fine

But I'd like to mention that it seems like a few people are forgetting about how they met their friends in the first place -- for a vast majority of us, the answer is school, something we sort of had no choice over and were sort of forced into. I participate in quite a few forums and sub-Reddits, but how many of them turn into actual real connections beyond the digital ones is slim.

Secondly, in response to those that want to only choose who they want to hang out with -- the flip-side of that is group-think and echo-chamber-ism by not subjecting oneself to orthogonal perspectives...

Lastly, as people in technology, we have choices about where to work -- find a place that works on something that you like with people that you like. I have a hard time empathizing with those that say, "we don't have a choice". Yes, getting a job, as a dev can be a grind, but imagine being a musician or an artist or an architect. Honestly, people in tech have it best -- in all other fields you're absolutely stuck and we're here bitching about WFH policies...

Your actions say otherwise.

You want to turn this into a framework/lib debate? I'm checking out. Angular is popular in the same vein that PHP is popular. People still use it. In fact, CodeIgniter is still very popular. It certainly has some use cases that certainly beat things like Rails, too. I see where you're going with this -- you care about popularity. Got it. Well, Svelte will check out now.

I could care less for any framework. I'm looking for the least friction, highest expressiveness, maintainability, and last, but not least, portability.

I just left a company that did React having spent the last year ripping out Nuclear for Redux and now there are React Hooks and Contexts. Hire massive teams to spin wheels rather than feature development and chalk it all up to tech debt sounds like fun.

WhatsApp would not exist if people didn't use more obscure technologies. 50 person team on Erlang for nearly a billion-user product while some organizations want to run 500 person teams to refactor the code written only a year ago be it Java or JavaScript.

You have not looked at Svelte. You've still the overhead of a virtual DOM and its diffing. People that turn a blind eye to Svelte will be blind-sided. It's like writing vanilla JS without all the baggage, because it's a compiler (think C++ versus Python).

I highly doubt that one can build a ReactJS app that loads faster than a Svelte one. I encourage you to try and share it. This is coming from someone that is a backend engineer that doesn't really do JS, but have had to for my own personal project and both perf and the subjective bit of expressiveness and joy of writing are important. Contrary to popular belief, people think that Svelte is trading perf for ugliness and lack of expressiveness.

I don't think anyone is going to sell you on something else, you seem very ingrained in the React ecosystem. More dollars doesn't equate to "better product" down the road. Angular came and is still a part of Google. Would anyone starting a new project use it over something like VueJS or React today? Probably not. Right? So that sort of tosses your argument out the window.

I don't do JavaScript professionally anymore, but I've worked with jQuery, BackboneJS, lots of AngularJS, some Elm, some VueJS, and some React, but being the curious person that I am, in search of greener pastures, I checked out Svelte, by first watching Rich Harris' video https://www.youtube.com/watch?v=AdNJ3fydeao on "Thinking Reactivity", then seeing the benchmarks: https://twitter.com/Rich_Harris/status/1200807516529147904, and watching Rich and Dan Abramov spar a bit over their challenges. From an outsider with no skin in the JS game, it is clear that Svelte seems far superior now and into the future...

1. it is a compiler (it's like comparing C/C++ to Python) 2. the joy of out-of-the-box animations that use the GPU in CSS (reminds me of the joy of using jQuery for the first time w/ it's OOB animations) 3. you can drop in any other JS lib (doesn't have to be in a particular JS framework ecosystem) and have it inter-op! This is huge! It's because it's literally like writing vanilla JS 4. no need to learn some new syntax like JSX (not a huge fan)

Just take a peek. If you don't like Svelte, so be it, but at least you know what it is that you don't like rather than turning a blind eye because you don't want to be convinced -- that's tunnel vision.

I was trying to decide between React/Vue/Svelte for a project I started recently, and after having attempted to build to-do apps in each, I landed on Svelte.

It's crazy how this reappeared on HN only hours after I went searching for awk on Hacker News. Fred Hebert is so well known in the Erlang and Elixir communities.

I have just coined this idea the "gateway drug" approach to learning new tools. We should strive to find those introductions that are small enough that someone can digest without a massive upfront time investment to get them past the front door :)

While you believe this to be strange, it is just another metric.

If you've not used Git or GitHub or any of the cloud providers for Git, it's a signal. To me it signals that someone uses open-source software or has some passing familiarity with it.

As a person that conducts interviews, the things that people leave public on a GitHub profile have been a pretty invaluable signal of attention to detail or code quality. If I see someone with a dotfiles repository, it likely means that they care about their craft a bit, and it factors into a part of the whole evaluation pie.

This! I'm working in a codebase at the moment where unit tests do the following:

1. cross multiple boundaries (integration test) by asserting that some system two degrees away from itself is being run/invoked (not a unit test's duty)

2. test descriptions read along the lines of, "it should work for valid use cases". This one made me laugh when I first saw it. This made refactoring a HUGE undertaking as I had to comb through all of it to understand it

3. mocking systems that weren't created by "us" -- this resulted in blind spots in various places

Test/code coverage is only one of many metrics to consider. I think it's useful, but its utility heavily relies on the quality of tests that are written.

I'm beginning to think that a hallmark of a good developer is one that understand what tests need to be written and what assertions must be made. This shines when the tests are written such that the developer can see how API design affects testing. I've worked in both functional and imperative languages and FP testing is harder to screw up as it forces the use of dependency injection. The idea of DI and inserting role players in imperative langs makes testing easier and shows that someone has thought about a reliance on behavior rather than concretions. So when I interview people, I always ask about dependency injection and polymorphism.

But working with seemingly more experienced (on paper) than me, I know that experience is also a terrible metric to rely on.

Another thing is Facebook provided options for selecting what to display -- just status, just photos, and something else before this was stripped away. I definitely used to use Facebook similarly to how I use Instagram today.

They could increase engagement if they simply put this back -- providing filters for original content versus external.

I, too, only want to see original content from people I actually care about. However, "care about" is very loose here, because for people with few connections, this probably doesn't matter much, but for users that have many connections and pages, etc, it makes sense to condense and perhaps rank content that a user likes from their connections higher.

Facebook is more of a visual Twitter for me -- people post articles and we have discussions as Twitter's format doesn't facilitate discussions nearly as well.

I'll have to add `git reflog` for instances where you've felt that you've completely screwed up something as one can always move back to a previous state. I think this is essential.

A useful one that I'll add is what I call the sword command: `git log -S<word>` This one allows one to list commits that contain a particular change. This has been useful in tracking down old changes

I'm in the camp where too many plugins (while nice for particular languages) is a crutch. I'd like to still be able to use it when my plugins aren't present on remote machines. It's part of the reason why I had, a one point, used the easy-motion plugin, but dropped it. Does it make things more cumbersome? A tad, but it forced me to build up a better workflow around it.

I'm also wondering when the last time you've used Vim was, because async plugin execution is now a thing, but I switched to NeoVim a while back it's fast.

The way I've come to understand this is that a method is how an object responds to a message or messages.

I've come to learn that a lot of us think about creating classes first and the conversations second. Conversations and the messages in these conversations should, often times, tell us whether creating a class right now is needed. I really follow the philosophy of putting off decisions to lock oneself into an abstraction too early on (not enough information/data) and preserving flexibility. Often times, a struct is enough for carrying pieces of a related idea around. It isn't until its internal state or a need for it to have conversations with other objects do methods defined in a class make sense. Furthermore, classes without methods are just state containers.

I write some Ruby and some of the basis of my ideas come from Sandi Metz's book, "Practical Object-oriented Design in Ruby" where she describes message-passing.

It's portable (although it's not a feature I care that much about), but programmatic layers are a huge plus for me. I use Vim and now I don't need to move a hand off my home row to use arrows and I love this. So, it's not really about space. It's also aesthetically more pleasing which is subjective. I'm a bit of a minimalist. I refuse to use multiple monitors such that I don't get used to having the additional screen-space, because I do have a tendency to work at coffeeshops and my workflow remains the same in the office and outside of it.

Thank you for sharing this. A couple of questions:

1. Curious as to which sub-field you're currently working in 2. What was the impetus for you to make the decision to quit work full time and study again full-time? 3. When you say that you've not met anyone in your subfield that doesn't have a degree, how sure are you? I'd like to imagine that there are at least one or two that started school but didn't finish

1. RNs have people's lives in their hands 2. CPAs have a fiduciary responsibility to their clients, especially in tax services

I think it is generally accepted that licenses don't signify "quality".

What are you hoping to gain with a license? Some badge that somebody can show to a prospective employer, so that they don't quiz you on capabilities?

I think we can agree that the field and knowledge required to perform as an RN doesn't change that often and the same goes for CPAs. However, the world of software is changing constantly. How could a licensing process ever stay up to date? Sure we could just test CS fundamentals and give people a stamp -- essentially what a degree is supposed to do. But if you're a software developer, like myself, that has interviewed many people and been subjected to many interviews, I know it's not a perfect process, but I've come across people that have exaggerated their abilities on resumés. One of the great things about software is GitHub, Bitbucket, etc. Why? Because it sometimes provides a window into the work of a developer before they make it on-site. I'd be happy if the industry as a whole just accepted this as the resumé and leaving the in-person interview as one that's non-technical, save for maybe something like FizzBuzz.

From my perspective, I think the idea of licensing is just an okay process for other fields. Without an interval of re-testing, how can we ensure that service providers can still deliver? I have friends that work at medical centers with doctors that have been there for decades that seem to have forgotten a thing or two, but refuse to accept the answer to a symptom or problem that is fresh in a new or recent grad's mind that's had fatal consequences. It's sad.