< Back to the archive

Like what you see? Subscribe here and get it every week in your inbox!

Issue #16 - June 23, 2019

Here are the top threads of the week, happy reading!

Top comment by koonsolo

15 years of experience here, an I noticed there is 1 main rule:

A great manager is at the service of their team, the team is not at the service of the manager.

The irony is that you don't really notice a great manager. Their job seems like a walk through the park, and you have a "I could do that job easily" feeling. That's because a good manager shields you from all the shit that's going on, so you and your teammates can concentrate on your job.

If you're in a project where shit hits the fan every time, where you have to extinguish fires, overwork because of deadlines, etc. then this is the managers fault.

I also noticed that the atmosphere within the team and the company, is always a reflection of upper management. And there is not much that can change this.

Top comment by simon_weber

I'm something of a free tier connoisseur, and recently built an entire project with 13 forever-free tiers. It was more of a personal challenge than a business decision, but it might be a good reference for what's out there: https://www.simonmweber.com/2018/07/09/running-kleroteria-fo...

Some other services not mentioned there that I've used for free recently:

- humio cloud for log aggregation

- nodequery for server monitoring (though its future is unclear)

- braintree used to waive a big chunk of payment fees ($50k?) for startups, but I'm not sure the program exists anymore

Beyond things that are literally free, I'm a big fan of cheap vps providers if your uptime can take it and you can do your own ops. One of my projects makes ~$200/month and is hosted for $6/year on a 256MB vps. Lowendtalk/Lowendbox is the usual place I find these.

Top comment by kowdermeister

Just do the rebranding, it's better to do it on the long run. Yes, it's a huge amount of work, but it could be done in a finite amount of time. The two names can co-exist, like

    New name (formerly HxHxHx)
Furthermore not all name updates are equally important, some can be done with a DB find and replace some is shit manual work, but you can hire for this job someone.

Read about stories how companies did this before. Currently I can think of one case that's ongoing: Taxify -> Bolt. They still have the Taxify logo on their cabs in Hungary but the app updated to Bolt (taxify).

Top comment by smt88

Agreed that they should show an interest before you embark on this. Finding joy in general education is more important than job skills for that age.

That said, Ruby and JS are not great languages for teaching fundamentals. They (especially JS) have a lot of weird design decisions that don't translate to other languages and don't map neatly onto problem spaces.

If you insist on JS, start with TypeScript at least. But maybe D, Kotlin, Go, or Dart would be better to teach general concepts.

Python would be a good add-on because they could actually use it to write quick utility scripts and, eventually, data analysis.

Instead of linear programming exercises, it may be easier to find problems they find interesting and help them Google their way through solving them. Maybe they have some tedious homework they could learn to automate.

The problem you'll find is that kids don't do much work, so programming (i.e. making a computer do work for you) isn't necessarily that exciting yet.

Top comment by Spearchucker

I wrote my first complete computer program on a Vic 20 in Commodore BASIC 2, in 1986. My first paid program in 1990, using Thoroughbred BASIC on a PC. Since then I've programmed (or scripted) in Assembler, BASIC, C, C#, C++, COBOL, F#, HTML, Java, JavaScript, LOGO, Pascal, SQL, VBA and XAML. I don't mind C#. Or Java. I stopped programming for my income around 2005 when I moved into architecture and then went the CTO route. Did take on another programming contract in 2011 though, because it was Nokia. Still write a lot of my own code though, and now exclusively in VB.NET because

- VB.NET supports both static and dynamic typing.

- VB.NET is a functional language, supporting local type inference, anonymous functions, monads, and language integrated comonads.

- VB.NET does project-wide namespace imports. C# doesn't.

- I like creating native client apps, and dislike the constraints and fragility of web apps.

- I've always found the Java developer environment to be brittle in comparison.

There are also a metric ton of readability issues in JS, Java and C# that VB.NET doesn't have (braces, == and =, ! instead of Not, separate keywords for inheritance and interface implementation, and so on). I also concede that I learnt Pascal before learning C (and prefer Pascal to C). The fact that Pascal and VB.NET share syntactical similarities (type declarations follow variable and function names, the Not keyword is probably not an insignificant factor.

And to be fair none of the above matter – the rationale came long after the fact that I use BASIC simply because I like BASIC.

The amount of disapproval, verbal abuse, ridicule and actual anger I've received for this over the years (and to this day) is insane. But you learn to deal with it.

PS. Did you know that the first prototype of Nokia Maps for Windows Phone was written in VB.NET? Nokia didn't know either, because they had like zero Windows Phone skills at the time.

Top comment by zxcvbn4038

Something you might not have considered is to forego the time and expense of the degree altogether. Particularly in IT most employers don't care if you have a degree or not - the ones that do can always use your existing degree to check the box. If you can pass the interview questions for development or systems engineering then more than likely you'll get hired. You might have to do temp to hire if you don't have a buddy to vouch for you, but you'll get in the door. There are a number of times I've been the most senior person ever hired without a degree, one Fortune 100 even changed their rules specifically so that they could hire me without a degree. The key phrase to remember is "equivalent experience" and you can usually imply that will be accepted. You will run across the occasional HR robot or insecure manager that thinks otherwise, but they are a slim minority. All of that money you spend on college is more or less a waste unless you are planning to be a doctor, lawyer, or something else heavily regulated where state or federal laws don't even allow you to take certification tests without a degree. (For example, in my state you can't take the bar exam without a J.D. degree and a number of hours as an unpaid intern)

Remember also, particularly in IT, that educating yourself is going to be an ongoing task for you. It doesn't have to be formal but you have to keep up. Read Hacker News and High Scalability, when you see things discussed that you don't understand then take it upon yourself to go understand. I probably spend sixteen hours a week on my own research.

Top comment by awillen

A few possible reasons for this:

- You aren't their target audience. I come from enterprise SaaS, where we often force people to talk to someone, and working with sales is not a problem for the people we care about. I know that someone who has your reaction (calling it a "sales dance" and assuming you'll be spammed) is unlikely to be a real buyer, since real buyers are accustomed to the sales process. They also appreciate that sales reps for this type of product can be really valuable. Maybe you're the exception here, but it's worth losing your business to filter out bad leads.

- They've done the math and realized that when they get someone on the phone, they are better able to build a long term relationship and have a substantially greater customer LTV. They lose some customers, but the ones they retain end up being higher enough in value to offset the loss.

- The product can't be sold as a standalone item - it requires setup and integration, and without understanding what you have in place already, they can't give you a quote. Of course, this seems less likely for a hardware solution.

- Related to the above, it's possible that it's a complex product to set up, and they've found that if they don't get you on the phone, you're likely to screw up the setup and get mad at them and/or return it. Better to scare you away up front if you're ultimately just going to take up time and end up getting a refund.

Ultimately, the answer to this question and any like it is that if they're competent, they do this because they've done the research and determined that it is better for them (typically in terms of revenue generation, but really better is defined as they see fit).

Top comment by jareds

I'm a totally blind developer and I find the easiest way to do code reviews is to use git format-patch on the branch containing the code. I read the patch files in a text editor. Perhaps comments in the pull request referencing a commit and line would allow the developer to get the required context from the patch files?

Top comment by dredmorbius

Take a look through Brian Castellani's Map of the Complexity Sciences (2018):

https://www.art-sciencefactory.com/complexity-map_feb09.html

Top comment by croo

For me implementing the data structure and it's operations made the difference between shallow and deep knowledge. There are a lot of data structures and I did not see anyone post a basic list so let me provide one, because once you know what you should seek things will be much easier.

Data structures:

- linked list (single,double)

- array list

- hash map with different implementations

- binary tree(and tree traversing, depth/breadth first search)

- red-black tree

- self balancing tree

- stack

- heap

- queue

- set (with funny set operations like intersection)

- B and B* tree

Read about their strengths and weaknesses.

With every data structure comes operations. More or less the same with a few speciality but their implementations are vastly different. You should try to implement the same operations at every data structure:

- Find an element

- Find min/max

- Add / delete an element

- Sort the data

Take time to implement the standard sorting algorithms for a list to understand the speed implications: quicksort, bubblesort, heapsort, radix sort, bucket sort

If you look for other algorithmic challenges I suggest checking out graph algorithms. Dijkstra and A* are the most famous.