Threads for srpablo

  1. 8

    Browse less, search more

    This threw me off…I think the author meant to write the other way around, which is how Hillel’s phrase goes? Unless there’s some irony here I’m not getting.

    1. 2

      I concur, given what the authors says afterwards.

      1. 2

        oh how embarassing, I meant the other way! 😅 Thanks for pointing it out, corrected ☺️

    1. 24

      In the “Why PHP?” Section:

      The answer is simple: because it was there. I’m self-taught, and I don’t have much in the way of formal training. Except maybe for the occasional online course I’ve taken, I have no piece of paper with a stamp on it from a prestigious university that says I can tell computers what to do.

      This is the crux of it, and there’s a lot of implicit things going on in these sentences. First off, there is a clear jab at people who do have degrees and formal training. “Prestigious” is used pejoratively and sarcastically here. This wasn’t the author’s path, so they resent people who did take that path. Of course when you are self taught, you skew towards any tool that can get you up and running the easiest and quickest. Note how I said “up and running” - it’s not the tool that is best in the long run, it’s the tool that gets you a picture on the screen the quickest. By the way, there’s value in that too, but I wouldn’t base all of the dimensions of my evaluation just on something “being there.” Availability is valuable, but it’s not the only valuable quality.

      This is a viewpoint that’s very common in the industry, I personally meet a lot of people who share this mindset. I don’t think it’s entirely wrong, but I think it’s a very limited way of thinking, and the people who hold it tend to be self-righteous like this. I understand that PHP might have been your path, and it might have worked for you. But a tone like this reeks of criticizing and minimizing other people’s path. I get that they feel defensive because people are attacking PHP, but I don’t think that’s causing this philosophy, I think this is many people’s true philosophy under the hood, this was just an excuse to write about it.

      Where does this philosophy come from though - can anyone name any popular programming language that was designed for “CS graduates?” Python? Java? Javascript? These are the most pragmatic and un-academic languages on Earth. The pragmatists and proudly un-educated have won, why are they claiming to be the ones that are being persecuted?

      Btw, if it’s important to anyone, I don’t have a CS degree, I studied Electrical Engineering. I definitely took CS electives, but I also consider myself mostly self-taught in terms of actual programming and CS. But I don’t knock the academic side of CS, on the contrary I think it’s responsible for every single good idea that makes its way into “practical” programming languages.

      1. 12

        I don’t necessarily have a problem with people using something that gets content on a screen quickly. But I don’t accept the excuse that self-taught means you can’t or shouldn’t grow beyond that. I’m self taught. I don’t even have a college degree and yet I learned Haskell. I can write Rust code. I started out in PHP but I outgrew it eventually. Anyone who can become an expert in PHP can do the same.

        It’s fine to get payed to write PHP. There is code out there that needs maintaining in PHP. But PHP earned it’s reputation as a deeply unsafe language to develop in and even with the improvements the language has made much of that unsafe core still remains.

        1. 5

          While the author of the article is being contemptuous to those with more educated backgrounds, I think you’re doing a bit of the converse here. Programming is as wide as humanity itself; if there’s a way for a computer (for some definition of computer) to accept input and provide output, I can guarantee you that someone will have probably programmed it. There doesn’t need to be a single, good path to programming. Whether your path involves writing PHP, unsafe C, or Haskell, it doesn’t really matter.

          1. 3

            It’s difficult in a comment forum to give an appropriately nuanced take on stuff like this. I didn’t intend to come off as contemptuous. If you get hired to help maintain a PHP codebase then the responsible appropriate thing to do is to work on PHP code. There is no shame or condemnation for it.

            Sometimes though I think people get stuck or pigeonholed as “PHP developer” or “Python developer” and never learn other tools or approaches. I want to encourage those people that they can be more than just $LANG developer. There are better tools than PHP out there that you can use when you get the opportunity. Learning to protect yourself from the flaws of a given language is a valuable skillset. There is no shortage of work for people who became experts in avoiding the pitfalls.

            But ,when you have the opportunity, it is hugely valuable to be able to choose a language with less pitfalls. Where the defensive programming is less about defending against the language itself and more about defending against the environment your software has to run in. Being able to choose those languages is also a valuable skillset that no one should feel is out of their reach.

            1. 1

              But ,when you have the opportunity, it is hugely valuable to be able to choose a language with less pitfalls. Where the defensive programming is less about defending against the language itself and more about defending against the environment your software has to run in. Being able to choose those languages is also a valuable skillset that no one should feel is out of their reach.

              Great explanation of this idea.

              1. 1

                It’s difficult in a comment forum to give an appropriately nuanced take on stuff like this. I didn’t intend to come off as contemptuous. If you get hired to help maintain a PHP codebase then the responsible appropriate thing to do is to work on PHP code. There is no shame or condemnation for it.

                I figured which is why I tried to keep my reply soft. I agree with everything you just said.

          2. 11

            Also, a CS degree doesn’t teach you programming anyway. It’s not meant to. It teaches you CS (or at least tries to). You probably self teach some programming along the way but it’s harly a focus of coursework.

            1. 5

              I don’t think that’s universally true. The first two years of required classes for a CS degree at the universities around me (US) were heavily focused on programming (Java… C++…), and failing any of those would have meant no CS degree.

            2. 8

              But a tone like this reeks of criticizing and minimizing other people’s path.

              I don’t entirely agree with your interpretation, but I will note for sake of irony that this is more or less how un-credentialed (in the sense of not having a degree in CS or other “relevant” field) developers feel for pretty much their entire careers. There’s a huge and powerful trend in tech hiring of prioritizing people who have a degree from one of the handful of trendy top universities, and a feedback loop wherein people who work at major companies help develop and teach “how to pass our interview” courses at those universities. The result is that if you are not someone who has a CS (or other “relevant”) degree you are constantly the odd one out and near-constantly being reminded of it.

              I still feel this coming up on 20 years in to the industry and with a résumé that largely lets me avoid a lot of the BS in interviewing/hiring.

              1. 4

                I still feel this coming up on 20 years in to the industry and with a résumé that largely lets me avoid a lot of the BS in interviewing/hiring.

                (I’m hoping this comment isn’t too off-topic.) I certainly agree. I myself come from one of those trendy elite CS universities (though it’s been a good while at this point) and am well credentialed, but I’ve started to use large numbers of junior engineers out of good schools to usually be a light negative signal when applying for a company. The culture of hiring in software is such that companies often overselect for credentials while ignoring effectiveness, at least in my opinion.

                1. 2

                  There’s a huge and powerful trend in tech hiring of prioritizing people who have a degree from one of the handful of trendy top universities

                  This depends entirely on your experience. I’ve never seen this trend, I’ve seen quite the opposite - a large chunk of people I work with don’t come from a CS or engineering background. Nor do I see anyone being hired over someone else because of where they went to school.

                  1. 3

                    The fact that you’ve never seen FAANGs go on-campus at certain universities (but not others) to recruit, help develop “how to pass the interview” curriculum to be taught at certain universities (but not others), etc., doesn’t mean that it doesn’t happen or that it doesn’t have an effect both on their resulting workforce/company culture and on everyone who emulates their hiring (which is unfortunately a large chunk of the industry).

                    1. 1

                      Let me repeat what I said:

                      This depends entirely on your experience.

                2. 7

                  can anyone name any popular programming language that was designed for “CS graduates?”

                  My glib answer: yes. Go. From Rob Pike, the creator: “The key point here is our programmers are Googlers, they’re not researchers. They’re typically, fairly young, fresh out of school, probably learned Java, maybe learned C or C++, probably learned Python. They’re not capable of understanding a brilliant language but we want to use them to build good software. So, the language that we give them has to be easy for them to understand and easy to adopt.”

                  More seriously, I think this “self-taught persecution” attitude is related to imposter syndrome and the increasing credentialism in society. A former coworker of mine tended towards a self-defense attitude and I chalk that up to his not having a CS degree as a developer (he did, however, have formal training as a jazz musician).

                  It’s also not as if PHP is alone in this hate—C is probably hated just as much, if not more, than PHP.

                  1. 3

                    Yet if you know C well, you’re probably seen as much better “programmer” then if you knew PHP well. But yeah, perceptions.

                    1. 3

                      Rent seeking isn’t hate. C dominates everything. So if you invent a new programming language, there’s only two paths to being successful. You can either (1) appeal to the new generation of young people to learn your language instead of C. That’s how PHP and Node did it. Or (2) you can run PR campaigns vilifying C until you’ve convinced enough VPs to convert their departments. That’s how Java did it.

                    2. 4

                      I agree with everything you said here. I even share your perception that many people seem to be insecure and/or defensive about not having a CS background or not really understanding some of the popular concepts we read about in blog posts, etc. Like you said: The “pragmatists” won- what are they worrying about?

                      In some ways, computer programming is very much like engineering– engineering jobs/tasks/people fall on a wide spectrum of “how academic” from “glorified assembly line work” all the way to “indistinguishable from pure science research.” And attitudes similarly span that spectrum. That’s not a bad thing–just an observation.

                      What’s extra frustrating to me is that it’s now turned a corner where if you do criticize a language like PHP, you’re seen as an irrational troll who just thinks you’re smarter than everyone else. It’s become anti-cool to shit on PHP, even though it’s still literally the least capable backend language being used today besides maybe Python (no async, no threads, no generics in its tacked-on type system, object equality is not customizable and will crash your program if you have a ref cycle, etc).

                      1. 3

                        As a developer that has experience building web backends in PHP but also some experience with Go, Python, Ruby (w/ Rails) and Rust, I wonder what language you deem capable as a backend language that still provides the same level of abstraction as, say, Laravel or Symfony. Rails obviously comes to mind, but what else is there (if Python w/ Django is out of the question)?

                        1. 3

                          Keep in mind that I’m not trying to evangelize “the one true backend language” or anything like that. My main point was just to gripe that there are still (what I consider to be) legitimate criticisms of PHP as a (backend) programming language, but whenever I point them out as reasons that I might suggest someone avoid starting a project in PHP, I’m met with more skepticism and defensiveness than I think is justified.

                          The secondary point is that I truly believe that PHP is strictly inferior to other backend programming languages. What I mean by that is that we all work differently and have different preferences: some people will like dynamically typed languages, some will like statically typed; some like OOP, some like FP. That’s all great. Scala is a very different language than Go, which is a very different language than Clojure. But if you look at “modern” PHP projects and “best practices” advice, it’s almost literally the same thing as the “best practices” for Java 7 in 2010, except that PHP doesn’t have good data structures in its standard library, has no threading or async, no generics, etc. And if you compare modern PHP with a recent version of Java… oh, boy! Java now has ADTs, Records, Streams, and a few other really nice additions that make writing code a little less painful.

                          So, it’s not just that I think PHP is a bad language, it’s that it’s, IMO, a less capable subset of another language. If it were actually different, then I might just shrug it off as a preference thing. I mean, PHP even stole the class semantics right from Java (single inheritance, interfaces, static methods, abstract classes, final keyword, etc).

                          I know people love Laravel, but my contention isn’t that Laravel isn’t good (I don’t honestly have much experience with Laravel, but I have worked with Symfony). But Laravel is not PHP. I’m talking about the language. If there’s something written in PHP that’s so valuable to your project that you choose to work with it, that’s great. But in my opinion, the sane attitude should be one of “Well, I guess it’ll be worth it to deal with PHP so that we can use XYZ.” and not “PHP is a good language and @ragnese is just an anti-PHP troll. What backend language could possibly want async IO or easy fire-and-forget tasks, anyway?”

                          1. 3

                            I don’t like rails either for slightly different reasons. I would rather develop in Go if I’m creating a backend web service than Python, Ruby, or PHP. I don’t find that I usually need much more abstraction than say gorilla most of the time. And Go doesn’t suddenly surprise me with strange behavior as often.

                            1. 2

                              The person they’re asking definitely doesn’t use Go though, because of:

                              no generics in its tacked-on type system

                            2. 3

                              Phoenix in Elixir is pretty good — very batteries-included, high-velocity, and extremely good with async/concurrency/parallelism. I don’t know if “object equality is not customizable” applies, it’s immutable with value-based equality at all points, so…

                              The tacked-on type system is pretty awful (Dialyzer is well worse than, say TypeScript, mypy, or Sorbet) but I don’t think it’s strictly worse, considering what you get from the framework/library.

                              1. 2

                                Based on their complaints (“no async, no threads, no generics in its tacked-on type system, object equality is not customizable and will crash your program if you have a ref cycle, etc”), and assuming they’re not using a really esoteric language, I’m willing to bet they use Scala, Java, C#, or Rust. I’m definitely curious about this too.

                                Whether or not those have a web framework that competes with Laravel, I’m not sure. That’s also not the measure of success though, for example if people are working with a lot of services a monolithic web framework isn’t as important or even desired. That’s one other thing to consider here - I think it’s accurate to say that PHP is synonymous with building monolithic web apps, and not everyone builds monolithic web apps.

                          1. 1

                            Is there not a “batteries included” Node framework like Rails yet? I haven’t had the need to look for one but the Rails pattern has been popular in other languages I’ve used (Like CakePHP, for example). My experiences with Node have been good, but almost entirely been “small script that calls AWS” or “single function execution in AWS Lambda.”, or “small Express application that generated PDFs”.

                            1. 4

                              I don’t think any languages have had breakout all-in-one Rails-style fullstack frameworks since Django. Basically since Sinatra came out (2007!), everything has been Flask or Express-like routers that connect together little pieces. Maybe it’s time for another megaframework to come out, but I sort of doubt it. I think the market has spoken and people want to be able to connect together small pieces instead of getting something omakase.

                              1. 7

                                Pheonix is closer to the “batteries included” mentality IMO

                                1. 4

                                  I think the market has spoken and people want to be able to connect together small pieces instead of getting something omakase.

                                  JavaScript, and npm in particular, have chosen this as their ethos: lots of little moving parts tied together manually. Think of the typical node_modules directory with 1000+ packages for a “hello world” app. Java has been the same way.

                                  The Ruby/Rails ethos has always been more human-focused: we’ll trade RAM/CPU and fine grained control for a developer experience that is fast and easy. Omakase.

                                  I agree with you: the JS ecosystem will never see a megaframework in widespread use because it goes against the ethos of the community.

                                  1. 4

                                    Phoenix in Elixir and most certainly Laravel in PHP both come to mind.

                                    1. 1

                                      I think the market has spoken and people want to be able to connect together small pieces instead of getting something omakase.

                                      I don’t agree - it’s not a market-driven opinion so much as it’s REALLY REALLY hard to both provide a good omakase-style framework AND get the necessary adoption within an ecosystem to reach rails-like status. It’s not that people don’t want it, as evidenced by the continued success of Rails. There’s luck involved in being in the right place at the right time providing the right developer experience - it’s hard to capture that purposefully, and that’s why we don’t see a lot of it. I might be able to twist my perspective into defining that as a market justification, but it’s not because it’s what PEOPLE want, it’s how the market incentives align.

                                      1. 1

                                        I think the market has spoken and people want to be able to connect together small pieces instead of getting something omakase.

                                        I hope so, but given the number of one-page rails apps and rails-like frameworks always popping up (there are several for PHP, several for Haskell, etc) I’m not so confident.

                                      2. 2

                                        Is there not a “batteries included” Node framework like Rails yet?

                                        I’m surprised the author did not address this as well. There are definitely full stack frameworks like Next.js and Alelph for React and Nuxt.js for Vue. Then there are also various DBaaS providers like Supabase and Fauna that can take the place of the back-end of a traditional Rails app. I’m sure I’m missing others. I admit I’ve only tinkered with these batteries-included options myself. I’m not sure what it would be like to use them in production.

                                        If the author had reason for dismissing them, I would like to know what it was. Otherwise the comparison is not particularly useful.

                                      1. 2

                                        Lord I love articles talking about how microservices actually fare. When you take function calls and make them network calls, you suddenly have to add latency requirements, alerting, monitoring, idempotency requirements…

                                        It’s often not worth it, and you slow down delivery on whatever your company is actually supposed to be delivering to customers.

                                        1. 1

                                          Company: Ramp

                                          Company site: https://ramp.com/careers

                                          Position(s): Software Engineers, Managers, Data folks of all types

                                          Location: Headquartered in NYC, remote has been happening during the pandemic.

                                          Description: We’re building a better financial stack for businesses: a charge card that maximizes control, transparency, and convenience, reimbursements and receipt uploading that doesn’t suck, accounting integrations to close your books in hours instead of days, and a backend to identify savings opportunities. Frees up your CFO of finance team to tackle more important problems. Businesses that run efficiently last longer and have happier employees.

                                          Engineering team is about 20 people: large enough that we have teams, not large enough that you don’t learn everyone’s name. We’ve got plenty of funding and big plans after a promising two years of delivery. Founders have exited successfully before, and wrote a sincere thank you to team who brought them there. I’m a bit of a cynical bastard and have a hard time trusting founders (easy to get burned! a lot of bravado and showmanship) so I’m extremely grateful to have joined this group, which is committed to winning this race the old-fashioned way: it starts with making a great product that solves a real problem!

                                          Tech stack:

                                          One set of services: Python (Flask, SQLAlchemy, Celery on RabbitMQ) & Postgres

                                          Another set of services: Elixir (Pheonix, Ecto) & Postgres

                                          Infra/DevOps: A ton of AWS services (Fargate, CodePipeline, CloudWatch) managed with Terraform, DataDog for a ton of logging, monitoring, and observability.

                                          Contact: You can apply on the careers page linked above, but feel free to reach out to me personally (pablo @ ramp . com), I’m the first full-time hire and love talking to engineers 😄

                                          1. 17

                                            Where do we go from here? What can a freedom-minded person do to avoid censorship by tech oligarchs?

                                            Nearly stopped reading here, but I’ll happily post it again and again: It’s not censorship if one company chooses to not do business with you.

                                            1. 14

                                              That’s actually still censorship:

                                              tr.v. cen·sored, cen·sor·ing, cen·sors To examine and expurgate.

                                              There’s a subtler meaning in there around “but it isn’t the government doing it”, but given the size of Google, Cloudflare, Facebook, and others who have successfully walled-in the public square, it is pretty disingenuous to pretend like there isn’t at least something going on there.

                                              For the folks going “hah, so what if it happens to people I don’t like?”–remember that time Tumblr’s ban hurt LGBTQ+ folks? Remember the various pro-BLM folks Twitter banned? Pepperidge Farm remembers.

                                              It’s completely reasonable for people to be concerned and want to learn how to host their own services, and mocking them for attempted independence seems to me to be both short-sighted and a defection against the hacker spirit.

                                              1. 2

                                                a defection against the hacker spirit

                                                Also on that topic, I’m reminded of the part in chapter 6 of Hackers by Steven Levy, where the MIT AI Lab hackers hated Multics in part because of its fine-grained usage accounting. Kind of like AWS and similar services, no?

                                                (So yes, the fact that my current project is all-in on AWS causes me cognitive dissonance. Not sure how to resolve it though. Multi-AZ deployments with automated recovery from instance failures are certainly good for peace of mind.)

                                                1. 2

                                                  Think about what infrastructure changes you would need to make in order not to be fully dependent on AWS, and then make them. Even if you don’t switch away from AWS immediately, being prepared to do so will make it easier on you if they do decide for whatever reason to deplatformed you, or if a competing cloud provider starts offering a better deal.

                                              2. 9

                                                maybe it is if the handful of companies that are powerful than most countries decide not to do business with you.

                                                Regardless of that highly charged political question, I think fighting oligarchy is worthwhile in itself.

                                                1. 7

                                                  What is it when all the infrastructure providers, payment processors, banks, and social media platforms all decide to stop doing business with you?

                                                  So glad my beliefs are currently in vogue with whatever you call that collective, whatever their non-censorship is, I’m glad I’m not being subjected to it.

                                                  1. 3

                                                    I followed this saga at the time, and my impression was that AWS bent over backwards to accommodate this service. It was only after those responsible failed to moderate the statements made by their users that violated the ToS they had willingly agreed to that service was suspended - not terminated.

                                                    The site is back online. The service is not, which really makes one wonder how much this is a genuine wish to offer a free-speech platform and how much it was an attempt to soak a well-healed backer for a lot of money.

                                                    1. 4

                                                      In what way did they bend over backwards? Was there even a court order telling them to take the site down?

                                                      1. 3

                                                        AWS gave them multiple chances to implement effective moderation.

                                                        There was no court order, the issue was a breach of contract (the ToS).

                                                        I can recommend Techdirt’s coverage of the issue, with this opinion piece as a good starting point https://www.techdirt.com/articles/20210115/00240746061/few-more-thoughts-total-deplatforming-parler-infrastructure-content-moderation.shtml.

                                                        https://www.techdirt.com/search-g.php?q=parler

                                                        1. 4

                                                          That writer seems to think any action is justified as long as it’s done by private companies in a competitive free market. Under that assumption, of course a breach of contract is more than enough reason to suspend service.

                                                          But if we care about who actually has power in society and how communication is shaped by different actors, this cold comfort. If AWS “bends over backwards” to offer a service they are being paid for, until the risk of a PR crisis makes it not worth it for them, they are still wielding unaccountable power to limit who gets to speak.

                                                          1. 2

                                                            Masnick’s position is more nuanced than you summarize it, but the idea of private parties competing in a free market is one that has served the US economy well for a long time.

                                                            As for AWS “wielding unaccountable power”, they’re far from a monopoly. Oracle is gunning aggressively for their business, as mentioned in other threads on this very page, and in the article I linked.

                                                            And whose speech are we talking about? The users of the site are free to create accounts elsewhere, and many have surely done so. What’s left is the limited speech rights of the service to make money hosting these users. This right has to be weighed against AWS’ rights to make money providing cloud computing to many other customers, all of whom AWS is aware can change providers if AWS allows toxic actors on its service.

                                                            If the service’s business model was to make money hosting speech that was banned elsewhere, it bordered on criminal negligence not to take the risk of being suspended into account, and making plans to shift hosting providers accordingly. Again, this points to this being a grift rather than a sound business idea.

                                                            1. 2

                                                              I think it is perverse to give any weight to a large company’s “right” to make money in a certain way, when weighed against issues that affect the mass of society. But I suspect you and I disagree fundamentally about this, so there’s probably no use trying to find agreement.

                                                              Another thing we will probably disagree about: the potential for competition among a small group of companies does not amount to accountability. People have very little say over what these companies do.

                                                  2. 9

                                                    Agreed. i appreciate the meat of the article but I can definitely do without the edgy quote at the beginning.

                                                    1. 5

                                                      Ditto with the mentions to Parler (including in the title)

                                                    2. 7

                                                      haha agreed, this the second time I’ve seen someone cite the “First they came for” poem to defend groups of people actively “coming for” me and my loved ones.

                                                      1. 8

                                                        Always feel weird when this kind of content use proto-fascism and right-wing extremists as an example for why we need to fight oligarch censorship. Of all the victims of censorship, those are the one I could not care less.

                                                        1. 6

                                                          Of all the victims of censorship, those are the one I could not care less.

                                                          I think that’s rather the point of the poem, isn’t it?

                                                          1. 4

                                                            No. Not when those being censored are the very same people that would want to be the “They” in the poem. The poem is that we shouldn’t stay idle while some group is trying to take advantage over other groups. I feel like what happened right now is that someone actually did speak up…

                                                            1. 2

                                                              Not when those being censored are the very same people that would want to be the “They” in the poem.

                                                              Plenty of people in Weimar Germany felt that way about the communists.

                                                            2. 2

                                                              Not really, at least in my reading. It’s not about the dangers of a “couldn’t care less” mindset but rather one of cowardice.

                                                            3. 2

                                                              HUAC was first used to jail Nazi sympathizers

                                                              1. 2

                                                                And good for them, let them rot in jail for all I care. I don’t mean that we should stand idle while states and corporations consolidate their power. Let’s speak about how HUAC or oligarchs can use their power monopoly and use it against the rest of the population. Let’s discuss about how we can fight against these crackdown in the point of view of freedom and privacy, not about how a right-wing extremist community should have done better.

                                                                1. 1

                                                                  Who is discussing how a right-wing extremist community “should have done better”? You lost me there.

                                                                  I guess you don’t value the legal and social norm of free speech as such, and take no issue if that norm is violated to target racist groups. You either don’t think that makes it easier to target non-racist groups, or you don’t care.

                                                                  1. 3

                                                                    Who is discussing how a right-wing extremist community “should have done better”?

                                                                    Taken as-is from the article:

                                                                    Parler’s epic fail: A crash course on running your own servers with a shoestring budget

                                                                    I argue that your chances of survival are much better this way, and Parler is foolish for not going this route. We can do better.

                                                                    Parler was cut off by their cloud hosting provider, Amazon. Where do we go from here? What can a freedom-minded person do to avoid censorship by tech oligarchs?

                                                                    1. 1

                                                                      ah

                                                            4. 2

                                                              whos coming for you

                                                            5. 3

                                                              Hosting your own content is exactly the method by which you work around private platform companies refusing to do business with you for political reasons.

                                                            1. 2

                                                              Wrote an article with similar sentiments: I get why many companies use it, but I wish the downsides where mentioned more often/explicitly.

                                                              1. 62

                                                                Thanks! Here’s to another year of giving up after a week.

                                                                1. 3

                                                                  Last year I tried doing every day in a different programming language. That didn’t last long.

                                                                  1. 2

                                                                    If time wasn’t a problem, could you have done it? Being able to use 24 different langauges would be quite impressive.

                                                                    1. 6

                                                                      Apparently I gave up 4 days in: https://git.sr.ht/~ianloic/AdventOfCode2019/tree but in that time I used one language I’d never used before (clojure - and I really have almost zero lisp/scheme experience) and two I hadn’t used in 20-25 years (TCL, DOS assembly language).

                                                                      I had come up with a list of language I could use and remaining were 6 I currently use regularly, 8 I’ve used in the past but am still fairly familiar with and 17 that I haven’t used, but I’m sure I can solve simple problems in - I didn’t for example include prolog.

                                                                      One thing that’s challenging is that the problems build upon each other so having to rebuild everything from the ground up in a new language each day is frustrating. If I could bring myself to dealing with a JVM I could try using a different JVM language every day because generally they have the ability to call into each other.

                                                                      1. 1

                                                                        I did Clojure one year, it was good. Still use Clojure for lots of my coding.

                                                                        I did Pharo Smalltalk one year. Convinced me to never use Smalltalk again. (I wanted it to be nirvana. It was not.)

                                                                        This year I’m doing Racket. It’s much more of a Lisp than Clojure ever wants to be. Very different experience, and I’ve not yet made up my mind. If I can’t stand Racket, I’ll switch to Fennel partway through.

                                                                      2. 6

                                                                        okay, I nerdsniped myself and I’m trying to do this again this year.

                                                                        1. 1
                                                                        2. 1

                                                                          Me too! I think I made it about 14 days or so? I shouldn’t have used my main languages for the early days

                                                                          1. 1

                                                                            I did this for most of 2016’s! https://github.com/pablo-meier/advent-of-code 22ish days.

                                                                          2. 1

                                                                            I usually make it to the third IntCode interpreter problem before I bail.

                                                                          1. 2

                                                                            I used OCaml for a personal project and what’s described here on tooling and general user-friendliness is sadly correct. And I didn’t need that many libraries, wasn’t writing a web service, or connecting to a third-party… it was a static-site generator! I really, really tried to make something positive come from my frustrations and wrote up some things I wish I’d known before, but you can tell the post is a bit seething with how hard it was to find what I needed.

                                                                            I think a doc like What I Wish I Knew When Learning Haskell or even How I Start would do a lot of good. There’s so much there that I love and I’d love to use it for more projects but it’s such a spiny experience I can’t recommend it to those who value their time.

                                                                            1. 4

                                                                              I agree this is a bit stark: Reminds me of one of my favorite jokes from this post:

                                                                              framework — A product with the business logic removed, but all of the assumptions left in.

                                                                              For every NIH mess a company can produce when they could have used an off-the-shelf component, there are just as many “avoid writing our own” horror shows around trying to build a sophisticated product around a combination of framework limitations that don’t quite fit.

                                                                              Some domains are super well-understood and writing your own is probably not where you need to differentiate (e.g. web routing, core HTTP handling). But further out, IMO it can be harder to tell at the outset.

                                                                              1. 2

                                                                                Ben (or do you prefer Benjamin?), this is great! When I saw this article in my RSS reader I laughed, because when I saw the Miracle Sudoku video I had the same inclination, and spent about 30 minutes trying to do exactly this, before I acknowledged I was avoiding my job and put it down. Thanks for this, helped me find the bug in my attempt 😄

                                                                                1. 1

                                                                                  Glad you liked it! I normally don’t finish these types of projects either, but had a bit of extra time due to the long weekend. :)

                                                                                1. 2

                                                                                  https://morepablo.com

                                                                                  Mostly write about whatever I found interesting that day, writing a lot more in quarantine. Some tech, but I wouldn’t consider it deep tech. Also interesting stories I find.

                                                                                  Tech I like is Erlang, Elixir, and OCaml. Most of my jobs are Python so I get mad at it sometimes lol 😛

                                                                                  1. 1

                                                                                    Wrote my blog in a static-site generator that I wrote (repo). I don’t recommend you use it; it’s probably got a lot of bugs or missing features for general-purpose use, but I had a hell of a great time making the generator.

                                                                                    I wrote about tech choices behind blogging years ago.

                                                                                    Thanks for the thread, I love reading other’s choices, finding their blogs, and wish you luck on yours! 😄

                                                                                    1. 8

                                                                                      While many entries are now 4 or 5 years old, I always greatly appreciated How I Start for this kind of thing, and wished documentation like it got more popular. I recently had a bit of a primal scream trying to get an OCaml setup and I identified what I’d love most in any programming environment for a project, especially when jumping into a new language:

                                                                                      • Project/directory structure.
                                                                                      • make-like invocations to do the following:
                                                                                        • Build artifact
                                                                                        • Run
                                                                                        • Run tests
                                                                                        • Clean
                                                                                        • Perform static analysis, if there are external tools (e.g. mypy, formatters)
                                                                                        • Deploy
                                                                                        • Open an interactive shell with definitions loaded.
                                                                                      • Easy to add reproducible dependencies (usually pinned with a lockfile these days).
                                                                                      • Use a language server (or plugin, or IDE) to give features like:
                                                                                        • Type of highlighted expression
                                                                                        • Jump to definition
                                                                                        • Find usages of highlighted term. Safe rename/delete.

                                                                                      And there’s only one or two languages I can do all of 👆 with, and it often takes a lot of tweaking. Also, many of the commands get slow as teams grow, so it’s less about quick iterative cycles (thinking of every slow pytest suite I’ve ever sat through for a ~50kloc project…).

                                                                                      Did I miss any? And how do we proliferate the knowledge or solidify the tools so that fewer of us have to work around the lack of these things?

                                                                                      I think a lot about Bret Victor’s mentioning sometime that a lot of programming skill is about being able to “play computer” in your mind, modeling its limitations while you work. But we do this… in front… of a computer! 😛

                                                                                      Anyways, happy to see this sentiment (“it’s more than just the source code”) getting traction 🙂

                                                                                      1. 3

                                                                                        I am a big fan of cookiecutter for much of this. It’s like an executable version of some of those “how I start” essays, but it doesn’t quite take you from absolute zero the way some of those do.

                                                                                        For stuff that’s new to me, I like to start by finding an opinionated cookiecutter for it. Once I’ve been at something long enough to have formed a more concrete opinion of my own, I’ll often fork one to suit my environment or needs a little better.

                                                                                        It’s not a full answer to your question, but it gets me going with a lot less tweaking than I used to do.

                                                                                        1. 1

                                                                                          That looks really cool! I’m going to have to use this in the future, Thanks!

                                                                                          1. 1

                                                                                            This looks awesome, I’ll take a look! 😄

                                                                                        1. 2

                                                                                          CommonMark parser for OCaml.

                                                                                          I’m not in the “escape velocity” point, I might still abandon it, but I’m enjoying it so far, and think I’ll enjoy seeing it through. There’s omd, which is simple and stores the intermediate parse tree, but has major incompatibilities with CommonMark. There’s also cmark, but requires the C binary be installed on your computer (hurts portability), and I’d like to preserve the intermediate parse tree. The idea is to insert fun additions like “estimated reading time of article,” adding id attributes to p tags for href-ble paragraphs, or syntax highlighting on code blocks.

                                                                                          1. 1

                                                                                            This post is hard for me to follow. Tags are not a full text search problem. And unless you are offering a completely open ended tag model, this should be fast for even a Reddit number of stories.

                                                                                            1. 4

                                                                                              This is an open ended tag model, and you’re right, it’s not full text search. My previous blog post was about full text search. This one is actually more about prepared statements.

                                                                                              1. 1

                                                                                                Yeah, I think the title buries the lede. I’m not interested in Elixir, but the post was actually a great read about Postgres.

                                                                                              2. 3

                                                                                                While I can’t speak to the design of the solution or Pleroma’s architecture (I’ve never implemented tag search or anything quite like it), I thought it was an interesting look at Postgres planned vs. unplanned queries 🙂

                                                                                              1. 13

                                                                                                Elixir for web-based projects, medium-to-large programs, and programs that need to be reliable, or will benefit from parallelism (so: most projects).

                                                                                                Python for extremely small programs or scripts, or when I’m on a team (everyone in my life uses Python for pretty much everything).

                                                                                                OCaml for when I can luxuriate a bit, want it to go fast, and hate myself a little.

                                                                                                1. 4

                                                                                                  Python is amazing for scripts and glue, and also for integration testing! Our team uses Pytest and Behave to make sure our services play well together.

                                                                                                1. 3

                                                                                                  This is fantastic, thank you 😄

                                                                                                  I’m working with a Python codebase I’m trying to get typechecked, and I’m finding the art is getting all the configuration exactly right on what/how to include dependencies, Any tolerance, the Tangle, and more. This is helpful.

                                                                                                  I’ve also enjoyed playing around with pyre-check, a tool to do static analysis and typechecking. It’s parallel OCaml, so it’s pretty fast, though the linked Dropbox post was very instructive on how mypy is feasible for large projects a well.

                                                                                                  1. 2

                                                                                                    Thanks I’m glad it’s helpful.

                                                                                                    In my experience most projects above a certain size do have a tangle. I think the way that import works in Python is probably one of the greater matters for regret about the language as a whole.

                                                                                                    pyre-check is on my list of things to try. There is also pyright which is worth investigation too.

                                                                                                    1. 3

                                                                                                      I agree that most large Python programs have dependency issues (though maybe not worse than large C++ programs). And Python imports are overly flexible / dynamic.

                                                                                                      I wanted to diligently avoid this for https://www.oilshell.org and I’m pretty happy with the results.

                                                                                                      It uses a pure dependency injection style. So rather than every module potentially importing every other, almost every module is imported from the driver, and the objects are instantiated and wired together in main().

                                                                                                      https://github.com/oilshell/oil/blob/master/bin/oil.py

                                                                                                      When I added MyPy type annotations, I hit all the “declaration deps” under if TYPE_CHECKING. So I know what are hard dependencies and where I just use the name of types – similar to #include vs. forward declaration in C.

                                                                                                      I also was diligent in handling circular dependencies (which are inherent in a language evaluator). I have never used this “circular deps” pattern but I’m pretty happy with it:

                                                                                                      https://github.com/oilshell/oil/blob/master/core/vm.py

                                                                                                      It turned out to have some unexpected benefits when translating Oil to C++. I can slice up the program very easily and translate just that part – there is no tangle.

                                                                                                      For example I translated the parser without translating the rest of the program, by writing a different main() and using MyPy annotations:

                                                                                                      http://www.oilshell.org/blog/2019/12/09.html#oil-native-shows-how-well-optimize-oil

                                                                                                      This is maybe not idiomatic Python but I think it’s better. Most Python programs rely on too many globals. Decorators seem to be a thing that encourage this and I generally avoid them. If you’re using many frameworks they’re hard to avoid though.

                                                                                                  1. 1

                                                                                                    Congrats on shipping! Here’s to much success 🍾

                                                                                                    I’ve got a project I’d like to get out there in a similar fashion and with similar ideals, always super inspiring to see steps like this 🎊

                                                                                                    1. 2

                                                                                                      I’ve sort of split things up a bit.

                                                                                                      On one hand I have my personal landing-page like site: https://eising.dk and then I have a few other sites, but most importantly my new tech-blog: https://eising.it

                                                                                                      1. 1

                                                                                                        Hi! I added your blog to my RSS reader, and noticed the posts in the feed are using relative links, e.g.

                                                                                                            <item>
                                                                                                              <title>5 reasons your network automation project may fail</title>
                                                                                                              <link>/posts/5-reasons-your-network-automation-may-fail/</link>
                                                                                                              <pubDate>Wed, 08 Jan 2020 07:47:44 +0100</pubDate>
                                                                                                        

                                                                                                        When I click the source link from my reader (an instance of Miniflux), it doesn’t place the link in relation to your source site, but my instance. This might be a bug with the reader (not sure about the formal RSS spec), but I don’t observe this too often in other feeds. Just an FYI.

                                                                                                        Thanks for sharing, looking forward to reading more of what you write! 😄

                                                                                                        1. 2

                                                                                                          Hi there. Sorry for the late reply.

                                                                                                          I’ve just updated the theme. Maybe it fixed the issue?