Hacker News new | past | comments | ask | show | jobs | submit login

GP has shown a long-term tendency to create a naive implementation, in VB.NET even, and then get surly about folks who refuse to acknowledge its sufficiency. No good can come from engaging / trying to educate.

N.b. built-in .NET object serialization is a slow, wasteful, brittle solution, but it could be okay if one doesn't mind the performance or portability issues. Heck why not use XmlSerializer then?




What's wrong with VB.NET? As far as I can tell, it's as good as anything else to get to the .NET Framework. I like it because it has more traditional syntax I believe is easier to teach, learn, read, write, and debug than C#.

With VB.Net, what am I giving up?

I'm asking about "sufficiency": It all seems dirt simple to me, where some simple code really is sufficient. So, where is the simple approach not powerful enough? Where is Redis needed and something simple not good enough? Where does my simple solution fall short? It appears that Redis is now really important: What does it have that is so important?

Is object instance serialization really slower than, all things considered, it has to be? Or if we accept (1) we are going to have instances of VB.Net style classes and (2) send the data via TCP/IP, that is, basically via byte arrays, then where can we do better than just serializing the class instances to byte arrays? If we work with just XML text, then we don't really have the advantages of performance of VB.Net instances of classes, and we're back to interpretive data structures instead of compiled data structures. I can think of some just blindingly fast approaches in PL/I because the PL/I data structures (1) are nearly as useful as class instances and (2) occupy essentially sequential storage -- so, could just copy storage from a starting address to an ending address and send the result as the byte array -- reverse that process at the receiver. Could do much the same with C structures, much less general than PL/I structures, if avoided most uses of pointers.

This is my first Web site, first use of collection classes, first use of a session state store -- I'm trying to learn what I'm missing out on.


> What's wrong with VB.NET?

nobody in the startup space is using it, so it'll be hard to hire for people that have the skills. There's a feedback loop there. Because no other companies are using it, people that don't have the skills also don't want to spend their time learning it, because the investment won't have a good pay off. I improved my resume and got more job offers by -removing- VB.NET ... nine years ago.

> It appears that Redis is now really important: What does it have that is so important?

It's really fast, really stable, and really well-understood by a lot of people. You can hire someone that already knows how to query it, how to operate it, how to fix it when it breaks. A lot of tools exist to work with it that you would have to write yourself if you rolled your own solution. When a bug is found, it's reported to the maintainers, and then fixed for everybody.

> If we work with just XML text

XML is pretty dead as a data interchange format. It's incredibly space-inefficient. Most people are using one of json, msgpack, thrift, or protocol buffers. (I'm personally a fan of protocol buffers; you write a schema and use the schema to generate the serialization and deserialization code, and the messages are efficiently-packed binary so they're pretty good on space efficiency.) There's a few outliers; mongodb uses bson because it predates the publication of msgpack but it's a very similar format. Writing the in-memory representation of a value and then reading it back on another machine and mmaping it and operating on it directly is a rare approach because it's hard to do it correctly while supporting changes to the types. Eventually you update an application, and an old record written by version 1 of the application has to be readable by version 2 of the application. It's not a completely dead strategy though, it's what cap'n proto does.

seriously though I'm willing to bet there is almost nobody on Hacker News that understands any of your PL/I comparisons. You keep bringing up PL/I as if you assume everyone knows PL/I. In ten years as a professional programmer you are literally the only person I have ever heard bring up PL/I in a discussion that's not about history.


I have a box from IBM with a version of PL/I that can run on Windows. I did run it years ago on Windows XP. I no longer run or want to run PL/I. I don't expect anyone to use it.

I bring up PL/I here on HN occasionally just as an example and lesson in programming language design. It's got some good features now lost, and for people interested in programming language design maybe some of the features could be brought back.

Since there has been a complaint on this thread that .Net style object instance de/serialization is slow and otherwise not so good, part of the problem is that such an object instance is not all by itself in some range of sequential memory addresses and, instead, can be scattered all over. So, de/serialization needs implementation by the language developers. So, HAVING the desired data in sequential memory could have an advantage, e.g., in speed, that is, just copy the contents of memory in the block of addresses -- tough to be faster than that (ah, do it in assembler and use some string copy instruction assuming that X86 has one of those!). Could do similar things for the simpler versions of C structs.

But in cautious shops, running code to get to memory addresses could be frowned on!

A broad point about PL/I is that its structures are nearly as useful as the .Net style classes but with much faster and simpler addressing. In programming language design, that's a little point to keep in mind.

I wrote enough C code to see how nearly all that syntax worked. So, maybe someday I'll write some C# code to be sure I know how its version of the C idiosyncratic syntax works!

Since I'm a sole, solo founder, floor sweeper to CEO, of my own startup, I get to concentrate on the tools my startup needs instead of tools someone else's startup uses!

The key-value store discussion here is good: I'm concluding that my needs are simple and my simple code is enough for those needs, that from the experience of others here in time I should want more functionality, and maybe should convert over to Redis. By then I might be hiring people to do such things.

I'm not sure that having my code in VB.NET is a serious dead end: As I understand, C# can do what VB.NET does with just a different flavor of syntactic sugar, there's a translator from Microsoft to go from VB.NET to C#, and the actual semantics are so close that for the corresponding language features (some of the more recent features in C# may be missing from VB) it is fine to call one of the languages from the other. That is, as I understand the situation, the real work is to get to the .Net Framenwork and the CLR (common language runtime) and VB, C#, F#, etc. are all essentially equivalent for that work. So, for differences we're talking some functionality and otherwise syntactic sugar.

My current work is more nonsense: Last night I started a run of Robocopy to do an incremental backup of one of my hard disk partitions. This morning Robocopy had completed without errors, but what it copied just as an incremental copy was about 80% of the whole disk partition when I've had only minor activity on that partition since the last full backup and turning off all the archive bits (archive bit OFF means that the file has been backup up since it was created or last changed and ON means that the file was created or changed since the last time the archive bit was set OFF).

So, somehow that disk partition got a LOT of archive bits turned on.

Open Object Rexx has a cute function can call to get a really nice description of everything in a file system subtree, one file/directory per line, with archive, hidden, system, read only bits, time-date stamp, size in bytes, full tree name.

So, I compared two of these files and found that after the last full backup I really did set all the archive bits off and for the incremental a lot of REALLY old files, going back years, still had their correct time-date stamps, had NOT changed, but DID have their archive bits set ON.

Bummer. Something has been walking around in that tree setting archive bits ON for NO good reason. Really big bummer.

So, to explain, the partition drive letter is K:. There are some files in the root of K:, but mostly the files are in K:\data01, ... K:\data05 and K:prog01, ..., K:\prog05. Right, separation of data and programs!

So, looking, all the archive bits set ON for no good reason were in just K:\data05. Hmm.

What could have happened?

Well, this computer is one I built from parts, running Windows 7 64 bit Professional SP1, but I also have an HP laptop running Windows 10 Home Edition with, of course, all the latest updates whether I wanted them or not.

And a week or so ago, I got okay with

net share

net use

etc. to set up file sharing between the two computers.

Well, I gave the Windows 10 system access to the Windows 7 directory, right, you guessed it,

     K:\data05
That about has to be the cause. Somehow letting Windows 10 share the Windows 7 directory

     K:\data05
had the Windows 10 system walking around all over that directory, including several directory levels deep, and to some files years old, and setting archive bits ON.

Bummer.

So, no more such sharing! I'll create a directory, say, HP_laptop_share, in the root of a partition and let Windows 10 share it. I'll just put temporary stuff there. And unless there are more bugs, Windows 10 will be limited to making a mess only in that directory

     HP_laptop_share.
So, with the HP OFF the Windows 7 system, I'll do a full backup, set the archive bits off, and keep Windows 10 the heck OUT of there! Lost half a day with this. I call it mud wrestling. I has NOTHING to do specifically with my startup. ALL the work unique to my startup has been fast, fun, and easy for me -- the difficulty has been literally YEARS of mud wrestling, all for no good reason. What do others do about such mud wrestling?


> I bring up PL/I here on HN occasionally just as an example and lesson in programming language design.

PL/I influenced B, which influenced C, which influenced so many things that literally every person on HN has used a language influenced by C. You're out here talking down to people like "you whippersnappers don't know what you're doing" when you're literally decades behind the curve.

and besides, check out lambda-the-ultimate.org, that's a community more specifically oriented at programming language design. And no, they don't talk about PL/I either.

> A broad point about PL/I is that its structures are nearly as useful as the .Net style classes but with much faster and simpler addressing. In programming language design, that's a little point to keep in mind.

Go has this, Rust has this, lots of languages have this. Language that give the developer the ability to control how their data structures are laid out in memory are not a revelation, we know about them. That's not a new or lost feature, you just have your head buried so far in the sand that you are incapable of viewing anyone that came after you as knowing anything.

https://syslog.ravelin.com/go-and-memory-layout-6ef30c730d51 https://doc.rust-lang.org/reference/type-layout.html

And besides, Go was co-designed by Ken Thompson, who invented B, which was strongly influenced by, drumrollllll please, PL/I!!! Your dedication to not listening to people has robbed you of knowing about things that you would probably like.

> just copy the contents of memory in the block of addresses

I already addressed this earlier. That's what cap'n proto and flatbuffers both do: https://capnproto.org/ https://google.github.io/flatbuffers/

If you listen to people, they don't have to repeat themselves so much.

> de/serialization needs implementation by the language developers

that's literally untrue. People write serialization and deserialization libraries all the time. Lots of languages give the programmer the ability to lay out how their data will look in memory, and lots of serialization libraries are mindful of creating values that have reasonable data locality characteristics. Lots of languages and deserialization libraries don't do this because it literally doesn't matter for most programs and for most programmers most of the time. You're approaching the problem as if computers are expensive, because in your PL/I days they were. But computers are cheap now, and getting cheaper every day. For example, an ec2 instance with 4gb of memory will run you all of $20 a month. Napkin math on some nice round numbers: a programmer costs you $150k a year and they work 2000 hours a year, that works out to $75 an hour, or $600 a day. If a task takes you one day, but you could avoid the task by buying another ec2 server, you just buy the space and avoid the task. A day of programmer time is worth 30 months of server time. Unless you're talking about Windows servers, which are twice as expensive because literally nobody runs Windows servers, they are garbage.

> I wrote enough C code to see how nearly all that syntax worked. So, maybe someday I'll write some C# code to be sure I know how its version of the C idiosyncratic syntax works!

That word does not mean what you think it means. Idiosyncratic is a relative term: it specifically means someone who is outside of expectations, outside of the norm. C-style syntax is used in, yes, C#, but also JavaScript, Go, Rust, and a great many other programming languages. It is PL/I that is idiosyncratic, as it is literally only you talking about it. Idiosyncratic does not mean "unfamiliar to ME", it means "differentiating the individual from the majority". If everyone is doing something one way, and an individual is doing it a different way, it's the individual that is being idiosyncratic.

I don't know why you went off on a long tangent about your backup problem. I do not care. It should be obvious to you that I would not care. And the cherry on the top was "I call it mud wrestling". Dude. We have a name for this. It's "yak shaving". Everyone uses that name. You would know that if you ever listened to anyone. https://en.wiktionary.org/wiki/yak_shaving

> What do others do about such mud wrestling?

You put all of your code in a hosted source control provider like Github or Bitbucket. Database backups and archival images go on Amazon's S3 or Google Cloud storage. Usually you'd automate the backups and make them full backups and retain a certain number of snapshots. I don't think most people nowadays back up their entire computer. "Everything important is in the cloud" is the most common strategy.

Talking to you is very exhausting. You consistently demonstrate a complete lack of respect for the generations of programmers that have followed you. As a result, you struggle with problems that beginner programmers solve every single day without issue.


> You're out here talking down to people like "you whippersnappers don't know what you're doing" when you're literally decades behind the curve.

I'm doing no such thing. I've done nothing wrong.

I know C and PL/I well, and I see little or no influence on C from PL/I.

> Go has this, Rust has this, lots of languages have this. Language that give the developer the ability to control how their data structures are laid out in memory are not a revelation, we know about them.

When I was at IBM's Watson lab, we designed the language KnowledgeTool. Then I looked at some of the literature of programming language design. I didn't find anything very new or exciting. It looked like a dead field. I haven't looked again since then.

Some years ago I made a decision, to do my computing on just one of Linux or Windows.

What influenced me:

(1) After some trying, I didn't find any documentation that explained even simple things about Linux. E.g., just what is/is not in a Linux "distro"? Do all the distros have the same operating system APIs, the same utilities, and run the same applications? What are the differences in the distros?

(2) What progress has Linux made in exploiting 64 bit addressing?

(3) With Linux, for operating system updates, do I have to compile the operating system?

The books I found didn't say. Dirt simple questions; no answers.

(1) For Windows, I was already using 3.1 or some such.

(2) I was and still am impressed by the relatively high promises of backwards compatibility.

(3) I looked around and saw some large Web sites using Windows.

(4) Microsoft runs some astoundingly well organized, huge server farms running Windows, e.g., just for their MSDN documentation. It appears that they have operating system installation down close to just push one button and bring up 1 million square feet of racks with servers.

(5) From what I've seen, I like the Microsoft file system NTFS.

(6) I want a LOT of good documentation. E.g.. for .NET I found, downloaded, read, abstracted, and indexed about 5000 MSDN Web pages. I put tree names in my code and have a single keystroke in my editor that will have Firefox display the page. Maybe this is something like what Microsoft does with intelisense -- but since I don't know anything about intelisense I can't say.

Microsoft's documentation is really good in some respects -- the pages are nicely formatted; they often have references to related pages; there is some organization to the pages; they spell the words correctly; etc.

I get torqued at times, e.g., when they use terminology without defining it, explaining it, or linking to such content.

For several of their major efforts, I still have no idea what they are driving at -- as far as I can tell, they don't explain. E.g., I went for some months getting their news letters touting Azure. Lots of talk about Azure. How good Azure can be. How to get started with Azure. And with all this, they never explained what the heck Azure actually WAS! Eventually Azure leaked out: It's a Microsoft server farm set up so that users can send their code and the farm will run it. So it' cloud computing often running some user's code. Okay. Now I understand the basics of Azure.

But I'm reluctant to bet that the Linux documentation is better.

(7) At the time, Microsoft had $40 billion in cash; now they are worth about $1 T. So, Microsoft DOES have the resources to keep Windows, Windows Server, SQL Server, various utility programs, malware defenses and corrections, etc. up to date.

(8) Microsoft has a LOT of users, and sometimes some of those users post good answers to some questions.

(9) I found that if really get stuck and really do have a serious question, then there are people at Microsoft who will give some fast one on one tutoring. E.g., early with VB.NET, I wrote a little routine to use classic heap sort to sort an array of instances of a class. I ran the thing, and it ran for 600 seconds when it should have run for about 2 seconds. So, right, I didn't understand just what I was supposed to do with polymorphism -- I was supposed to write an interface. Gee, we did much the same back in Fortran. Okay, polymorphism has a lot of hype and, really, is much like what we were doing with old Fortran; have to write an interface; I found some examples, tweaked a little, got an interface, and running time about 3 seconds.

An amazing part is that somehow VB.NET essentially dynamically discovered the data type of the class I was passing to the sort routine. So, maybe all that is available via reflection. I was impressed.

For GO, Rust, Haskell, as for Ada, Prolog, APL, etc., for me for my work now mostly no thanks.

I need to eat; for that, need to make money; for that, starting a business. The business makes use of computing, and I have to write some software.

For that software, on Windows, I picked VB.NET. It's fine with me. I suspect that I could convert over to C# without much trouble. One way to convert would be just to run my VB.NET code through a translator that writes out equivalent C# code -- my understanding is that Microsoft has such a translator.

As far as I can tell, VB.NET is a plenty good way to get to the Windows services and APIs, the .NET Framework, and the common language runtime (CLR).

Maybe some programmers take pride in learning lots of languages. Okay. But that's not what I am: Instead, I'm trying to start a business.

Besides, I don't see much attention to GO, Rust, Haskell, etc. on Windows.

On being "behind", I don't think so: The amazing thing about computing is the low cost and high performance of processors, storage, and communications.

Other than that, the significant things in computer science and practical computing have changed only very slowly.

To me programming is essentially defining storage, writing expressions to manipulate storage, the control structures if-then-else, do-while, and call-return, handling various data types, e.g., strings, dates, and handling exceptional conditions.

To me the key to my startup is not the computing at all -- it is just routine. The key is some applied math I derived. So, I'm an applied mathematician in business who uses computers.

The computer tools I use are the ones I want for my business. Since I won't be using Go, Rust, Haskell, Java, Ada, Prolog, etc., I don't pay attention to them. Someday I may use some Python or JavaScript -- if to, then so be it. Microsoft has Iron Python that is compiled and maybe has good or full access to the .NET Framework. Okay.

To me, the future of computing will be in mathematics, complete with theorems and proofs.




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

Search: