Hacker News new | past | comments | ask | show | jobs | submit | bsingh4's comments login

Amazon AWS | Senior Software Engineers, Engineering Managers | New York | Onsite Preferred | Full Time

The Proactive Security team at AWS is looking for Engineers and Engineering Managers to bootstrap a new effort for secure by default. You’ll ship secure by default CDK constructs and Java/Python/etc libraries which will help engineers build secure software. Apply below.

Engineering Manager (L6): https://amazon.jobs/en/jobs/2249659/software-development-man...

Engineering Manager (L5): https://amazon.jobs/en/jobs/2249660/software-development-man...

Engineer (L6): https://www.amazon.jobs/en/jobs/2045036/software-dev-enginee...

Engineer (L5): https://www.amazon.jobs/en/jobs/1917469/software-development...

Support Engineer (L5): https://www.amazon.jobs/en/jobs/2235753/support-engineer-aws...



iConstituent | Full-stack Engineer | Washington, DC | REMOTE | https://iconstituent.com/

iConstituent has been a leading provider of software solutions for elected officials for over a decade. We have a loyal client base and are debt free. However, we are a team of highly motivated engineers and entrepreneurs - complacency is not an option. We refuse to sit idly by and contribute to the lack of innovation in the market we serve. We revolutionized our product line and made the largest internal investment in technology the company has made in our history. We are continuing to iterate on this promising new product. We want to redefine how our customers use constituent engagement tools. Be a part of the ground level of building a fresh approach to software that connects millions of constituents with their elected officials.

Our stack: Angular 9, Material Design, TypeScript, C#, .NET Core 3.1, SQL Server, AWS, Kubernetes

The interview process is a phone screen and a take-home coding exercise. Competitive pay, remote-first team, and full benefits. Bonus: the ability to give your friends and family tours of the U.S. Capitol Building!

Interested? Email engineering@iconstituent.com


iConstituent | Full-stack Engineer, Front-end Engineer, Product Designer | Washington, DC | ONSITE, REMOTE | https://iconstituent.com/

iConstituent has been a leading provider of software solutions for elected officials for over a decade. We have a loyal client base and are debt free. However, we are a team of highly motivated engineers and entrepreneurs - complacency is not an option. We refuse to sit idly by and contribute to the lack of innovation in the market we serve. We revolutionized our product line and made the largest internal investment in technology the company has made in our history. We are continuing to iterate on this promising new product. We want to redefine how our customers use constituent engagement tools. Be a part of the ground level of building a fresh approach to software that connects millions of constituents with their elected officials.

Our stack: Angular 9, Material Design, TypeScript, C#, .NET Core 3, SQL Server, AWS

The interview process is a phone screen, onsite interview, and a take-home coding exercise. Competitive pay, full benefits, and an exciting entrepreneurial environment to work from in Navy Yard. Bonus: the ability to give your friends and family tours of the U.S. Capitol Building!

Interested? Email engineering@iconstituent.com


For AWS users AWS CDK is a far better take on infrastructure as code - strongly typed TypeScript resources and higher level constructs that hide the underlying details of load balancers, IAM, etc. Pulumi was not as useful the last time I tried it - most resources were string key-value pairs with no typing or code completion. You're still referencing documentation to do anything and defining tons of low level resources to accomplish basic tasks. Might as well be writing raw Terraform or CloudFormation configs at that point, as they have more documentation available.


Hmm... just to set the record straight, Pulumi definitely does have TypeScript type definitions for all resource types, across all of our providers, and it has had them since our initial launch.

Happy to help you debug why you're not getting type hints, drop me a line at alex@pulumi.com or on the community slack: https://slack.pulumi.com/


Something was wrong w/ your setup I think. All of their code has Typescript annotations, and their autocomplete w/ intellisense is remarkably useful.


Here are two simple database definitions:

Database in Pulumi:

  const db = new gcp.sql.DatabaseInstance('app-db', {
    databaseVersion: 'POSTGRES_11',
    region: 'us-central1',
    settings: {
      tier: 'db-f1-micro',
      diskType: 'PD_HDD',
    },
  });
Database in AWS CDK:

  const db = new rds.DatabaseInstance(this, 'AppDb', {
    engine: rds.DatabaseInstanceEngine.POSTGRES,
    engineVersion: '11.5',
    instanceClass: ec2.InstanceType.of(
      ec2.InstanceClass.STANDARD5,
      ec2.InstanceSize.XLARGE
    ),
    storageType: rds.StorageType.GP2
  })
Not to mention they have higher level constructs like DatabaseCluster that will handle the underlying details of replicas and create the lower level resources for you.


`DatabaseInstance` not only has TypeScript type definitions, it's actually written in pure TypeScript: https://github.com/pulumi/pulumi-gcp/blob/master/sdk/nodejs/...

Pulumi also does have a number of higher-level constructs, which you can learn about here: https://www.pulumi.com/docs/guides/crosswalk/aws/


Why is every single property of type string - to see what to put there I have to reference a comment in code? I shouldn't have to read comments to see what the magic string is for the f1-micro tier, or the hard disk type or the region. CDK has actual Enums for all of these things that work to make life easier. You're not making it any easier to code up a DatabaseInstance - its simply a bucket of keys and values where I'm looking up what those values should be.


Ah—unions of strings (e.g., `"foo" | "bar"`) effectively are enums in TypeScript and JavaScript. They are autocompleted and type-checked at compile time, so you should get exactly the same behavior. Even exhaustiveness checking. See docs[1] for details.

And, to the specific point: you absolutely should not have to look up the docs. These values definitely will autocomplete.

Anyway, aside from all that, unions of strings is "the idiomatic way" to do this sort of thing in TypeScript and JavaScript.

[1]: https://www.typescriptlang.org/docs/handbook/advanced-types....


None of the properties in the DatabaseInstance construct example posted above are defined as unions of strings - the TypeScript documentation link you just posted is irrelevant.

This is what one of the property types actually look like:

    /**
     * The MySQL or PostgreSQL version to
     * use. Can be `MYSQL_5_6`, `MYSQL_5_7`, `POSTGRES_9_6` or `POSTGRES_11` (beta) for second-generation
     * instances, or `MYSQL_5_5` or `MYSQL_5_6` for first-generation instances.
     * See [Second Generation Capabilities](https://cloud.google.com/sql/docs/1st-2nd-gen-differences)
     * for more information.
     */
    readonly databaseVersion?: pulumi.Input<string>;
In AWS CDK it was an easy task to select Postgres - in Pulumi case I had to read the comment.


Oh, I see. Some properties that are not as well-typed as they could be, that's true. We are working on that. But there are lots of properties that do have good typing. Instance types, for example.


I don't think large blocks of comments qualify as strong typing: https://github.com/pulumi/pulumi-gcp/blob/76df2e85214ad13465...


I don't think I understand, but am happy to help clarify. That is a TypeScript file where the type `DatabaseInstance` is defined. It's a completely normal TypeScript type—it will get picked up by editors, verified by the compiler, and so on. It is exactly the sort of type you'll find in CDK.


It sounds like she/he/they really don't like your product and are reluctant to admit they were wrong. I for one am enjoying my Pulumi adventure.


Me too, big fan of pulumi!


You can simply dockerize your app and deploy it to Heroku: https://medium.com/faun/how-to-dockerize-a-net-core-applicat...


You've only taken care of the surface-level complexity with AWS. Want to do something more like add a header to the response? Well then, create a lambda, deploy it to the edge, and pay per page view. This is something Firebase is much more elegant at - the initial deploy, and then evolution and addition of features geared to static site deployment.


iConstituent | Full Stack Software Engineer, UX Designer | Washington, DC | ONSITE, https://iconstituent.com/

iConstituent has been a leading provider of software solutions for elected officials for over a decade. We have a loyal client base and are debt free. However, we are a team of highly motivated engineers and entrepreneurs - complacency is not an option. We refuse to sit idly by and contribute to the lack of innovation in the market we serve. We revolutionized our product line last year and made the largest internal investment in technology the company has made in our history. We are continuing to iterate on this promising new product. We want to redefine how our customers use constituent engagement tools. Be a part of the ground level of building a fresh approach to software that connects millions of constituents with their elected officials.

Our stack: Angular 7.x, Material Design, TypeScript, C#, .NET Core, SQL Server

The interview process is a phone screen, onsite interview, and a take-home coding exercise. Competitive pay, full benefits, and an exciting entrepreneurial environment to work from in Navy Yard. Bonus: the ability to give your friends and family tours of the U.S. Capitol Building!

Interested? Email engineering@iconstituent.com


Backend API: .NET Core

Web Frontend: AngularDart

Mobile: Flutter


Dart has a sound type system. Why would someone voluntarily deal with TypeScript unless forced to by the browser environment?


Row polymorphism and algebraic data types if we want to talk about things Dart does not have, with an enormous ecosystem at your disposition.

If we want to prioritize a sound type system, why then go for a language that is for the most part Java but with no ecosystem, instead of something like Reason/OCaml, Haskell, PureScript which absolutely blow Dart out of the water as languages; or even if your number one priority is targeting Java devs with something more palatable, why not Kotlin even?

Why give artificial life to a language that was on its deathbed and brings absolutely nothing useful to the ecosystem yet will contribute to the amount of churn suffered in the industry?


If you talk about ecosystem as a number of community-built packages for a language then this argument is meaningless.

Just start creating packages for this language and very soon you'll have a rich ecosystem too.

This is not an inherent characteristic of a language itself, it's something powered by the community and built over time.

The larger community is => the better ecosystem we get.

Re: lacking features. Feel free to submit a request here https://github.com/dart-lang/language

Dart team is already working on some nice additions to the language. If ADTs are something many community members are looking for, I'm pretty sure it'll be added.

> and brings absolutely nothing useful

Dart is a language that's predictable (no WATs), performant, has the best built-in tooling to facilitate quick iterative development, the best package manager and can be used to build web, mobile and desktop apps with high level of shared codebase between them.

It's not the best language by any means but it's already a good language. And it's getting better and better.


Well that is a non-answer on every front. Of course, if devs start pouring effort into Dart it will get an ecosystem; but why would I want to when Dart offers nothing over other languages?

And yes, we can submit feature requests, and the language authors may and may not add them. I'd rather go for a language that further aligns with the expectations of a modern language from the start rather than plead with the authors to turn it into something it's not.

> Dart is a language that's predictable (no WATs),

Ok, so it beats the raw JS with no dev tooling development experience. That's the bare minimum.

> performant

Plenty of performant languages to go around, including many more performant ones.

> has the best built-in tooling to facilitate quick iterative development

What does it bring over any other language with a semi-decent REPL?

> the best package manager

You'll have to expand on this, it's a very bold claim.

> and can be used to build web, mobile and desktop apps with high level of shared codebase between them.

So can any compile to JS language, Kotlin, C#, Clojure, among others, and since you place so little value on ecosystem I'll throw a special mention to Idris in too, which can compile to performant JS, the JVM (no bridge necessary on Android), C (usable on iOS) and pretty much whatever; and almost guaranteed blows any other language you can name out of the water when it comes to modern features and being pragmatic.


Join us for AI Startup School this June 16-17 in San Francisco!

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: