Computer coding

Read up on the basics here for starters, can't really help about cyber security jobs it's a bit beyond my level
 

AlienFTM

MIA
Book Reviewer
Which trade teaches you computer coding? Or anything similar to cyber security.
My unit (cavalry) paymaster encouraged me to transfer to RAPC (now I believe AGC Special Pen Service) where I could become a mainframe programmer and be set up for life.

I did eventually do that, though not directly at is bidding, but I had a supporter on the inside.

The mainframes were replaced after I left, and even at the heart of the industry there's no longer a need for pure mainframe skills. AGC must somewhere still have the skills to make a computer pay the army.
 
The mainframes were replaced after I left, and even at the heart of the industry there's no longer a need for pure mainframe skills. AGC must somewhere still have the skills to make a computer pay the army.
Contracted out. Oracle built JPA, the pay and admin system.

Coding? Unknown, but Royal Signals are probably the most likely.

@Cheetah - google British Army Cyber Security; there’s a composite unit that does it I think.
 

Sarastro

LE
Kit Reviewer
Book Reviewer
Which trade teaches you computer coding? Or anything similar to cyber security.

In principle: Royal Signals. In practice: RAF and Reservists.

If you want to do cyber anything, don't join the Army. Join the RAF, or even better, do it in the civilian world. You can teach yourself to code with free resources online (W3Schools Online Web Tutorials is a great resource to get started with web technologies). If you're any good at it, you'll start to work out ways in which you can use it.

I would go as far to say that if you don't have the interest and discipline to start with something like W3 schools and learn from there, on your own, you aren't ever going to get to an interesting level of cyber-security work anyway.

Increasingly you can teach yourself low-level cyber-security tasks like penetration testing from online resources, although to get paid for it you'll need to pass a qualification. Most cyber-security jobs and people who do them neither need to nor are able to code. They are fairly dull compliance tasks which involve using a standard set of tools to check a system, and write a report advising what should be changed.

My unit (cavalry) paymaster encouraged me to transfer to RAPC (now I believe AGC Special Pen Service) where I could become a mainframe programmer and be set up for life.

I did eventually do that, though not directly at is bidding, but I had a supporter on the inside.

The mainframes were replaced after I left, and even at the heart of the industry there's no longer a need for pure mainframe skills. AGC must somewhere still have the skills to make a computer pay the army.

They barely still have the skills to use the computer that pays the Army...
 
They barely still have the skills to use the computer that pays the Army...

True. My personal record for a pay screwup was 12 months from report to solution - the excuse trotted out to me (and the CO) was that "the computer that pays the Army" couldn't cope with the concept of a TA Group A officer on the strength of a TA Group B unit; and that we should just wait for things to be fixed, rather than just doing a bank transfer for the cash we were owed.

...And the staff officer who I discovered had a job at the Army Personnel Centre, wondered why I pitied him for working at the least competent HR department in UK industry. [*]

* Standing at the side of a mat during a kids' judo competition, watching our respective sons. I mention that our club has just started an adult beginners class, that it's huge fun, and had he ever considered taking up the sport? No, he says, he couldn't risk getting injured in his current job. What job was this, I ask, and was surprised to hear "Army Officer" as a reply. Thinking he must be something terribly high-readiness and crunchy, I gently enquire as to his current posting - "staff officer at APC", he says. Ahhhh, the RLC, bless them...
 

lert

LE
1010010 01000101 00100000 01000111 01100101 01101111 00100000 01110111 01101001 01101100 01101100 00100000 01101000 01100001 01110000 01110000 01101001 01101100 01111001 00100000 01110100 01100101 01100001 01100011 01101000 00100000 01111001 01101111 01110101 00100000 01110000 01111001 01110100 01101000 01101111 01101110 00100000 01110100 01101111 00100000 01110001 01110101 01101001 01110100 01100101 00100000 01100001 00100000 01101000 01101001 01100111 01101000 00100000 01101100 01100101 01110110 01100101 01101100 00101110 00100000 00100000 01010000 01111001 01110100 01101000 01101111 01101110 00100000 01101001 01110011 00100000 01100010 01100101 01100011 01101111 01101101 01101001 01101110 01100111 00100000 01110110 01100101 01110010 01111001 00100000 01110011 01101111 01110101 01100111 01101000 01110100 00100000 01100001 01100110 01110100 01100101 01110010 00100000 01101001 01101110 00100000 01100011 01101001 01110110 01110110 01111001 00100000 01110011 01110100 01110010 01100101 01100101 01110100 00101110
 
1010010 01000101 00100000 01000111 01100101 01101111 00100000 01110111 01101001 01101100 01101100 00100000 01101000 01100001 01110000 01110000 01101001 01101100 01111001 00100000 01110100 01100101 01100001 01100011 01101000 00100000 01111001 01101111 01110101 00100000 01110000 01111001 01110100 01101000 01101111 01101110 00100000 01110100 01101111 00100000 01110001 01110101 01101001 01110100 01100101 00100000 01100001 00100000 01101000 01101001 01100111 01101000 00100000 01101100 01100101 01110110 01100101 01101100 00101110 00100000 00100000 01010000 01111001 01110100 01101000 01101111 01101110 00100000 01101001 01110011 00100000 01100010 01100101 01100011 01101111 01101101 01101001 01101110 01100111 00100000 01110110 01100101 01110010 01111001 00100000 01110011 01101111 01110101 01100111 01101000 01110100 00100000 01100001 01100110 01110100 01100101 01110010 00100000 01101001 01101110 00100000 01100011 01101001 01110110 01110110 01111001 00100000 01110011 01110100 01110010 01100101 01100101 01110100 00101110
How dare you! My mother is a saint!
 

The_Snail

ADC
RIP
Why is this in the Arrsepedia bit?
 
There was a module on programming my T1, but a) no use at all for the job and b) it was 20 years ago and will have gone by the wayside now.

If you want to code, there are very different levels of competency/knowledge/remuneration.

For example, a basic scripting language such as Python is universally available, simple to grasp and is very versatile in its applications. However, it is not very performant, being an interpreted language. By interpreted, I mean "print "Hello, World!"" has to be converted at the time the script is run to the operation codes understood by the CPU. That is a high-level language, and slows it down big time.

An intermediate language that is compiled, the classic being C, is written, and compiled to produce object code, which is already in the form of the CPU's opcodes. Much faster. However, C is more basic in its features, and if a particular function is not included (eg trig functions) you either have to write it yourself, or find a library that already exists with the desired functions. There are standard libraries, which helps, but it is still a harder thing to understand and become proficient in C than say Python or Javascript.

A low level language, the classic being Assembler, is written in the CPU's opcodes to begin with. Writing say a database program in Assembler is akin to digging the Channel Tunnel with a shovel and jackhammer. Possible, but would take an eternity. However, the code is reet quick! Assembler is often used to speed up computational bottlenecks.

Even lower would be a hardware description language like VHDL. This is used to describe how to build say a CPU from unconnected gates in a special programmable chip called an FPGA. This can be used to build specialized hardware that performs a particular function as though a chip had been designed to do that function and that function only. Very, very quick at doing what that function is. Enormously complex to understand and implement a high-level function in VHDL. Having got it running, one could then use the code to blow a run of Application-Specifc ICs (ASICs) and quickly and cheaply have thousands of devices doing that function. But the overall investment to get a low per-unit price in both intellectual talent and infrastructure is massive.

Good, quick or cheap. Pick two.

The military is not really the place to become a computer programmer. Some very obscure bits of the MOD will have people who do this kind of thing, but really, it's uncommon overall.

---

Cyber security - this is a whole different ball of wax to programming. Typically, cyber professionals use tools written by other people to perform their job. They are looking for things like security vulnerabilities and data breaches in the traffic on their networks. They don't necessarily write any software themselves. Maybe a script here and there to say automate log file handling, but that's hardly "coding", and really it's table-stakes to be able to do that. If an applicant couldn't write a simple script to archive logs, then I'd be questioning their competency in understanding the nuances of the traffic.

The people that write cyber-oriented software and make appliances that do the work typically are disconnected from the coalface where the live traffic is. That is true for even the big guys in government. Plenty of work in that field, but you'd need a decent rack of qualifications and experience to get on in the field. Things like internships would get you the basic exposure to that world, and I would encourage you to do as many as you can. You're much more likely to get a start in the business if you've got one or two internships under your belt, indicating exposure to the basics.

Best of luck.
 
1010010 01000101 00100000 01000111 01100101 01101111 00100000 01110111 01101001 01101100 01101100 00100000 01101000 01100001 01110000 01110000 01101001 01101100 01111001 00100000 01110100 01100101 01100001 01100011 01101000 00100000 01111001 01101111 01110101 00100000 01110000 01111001 01110100 01101000 01101111 01101110 00100000 01110100 01101111 00100000 01110001 01110101 01101001 01110100 01100101 00100000 01100001 00100000 01101000 01101001 01100111 01101000 00100000 01101100 01100101 01110110 01100101 01101100 00101110 00100000 00100000 01010000 01111001 01110100 01101000 01101111 01101110 00100000 01101001 01110011 00100000 01100010 01100101 01100011 01101111 01101101 01101001 01101110 01100111 00100000 01110110 01100101 01110010 01111001 00100000 01110011 01101111 01110101 01100111 01101000 01110100 00100000 01100001 01100110 01110100 01100101 01110010 00100000 01101001 01101110 00100000 01100011 01101001 01110110 01110110 01111001 00100000 01110011 01110100 01110010 01100101 01100101 01110100 00101110
aaa.png
 
There are standard libraries, which helps, but it is still a harder thing to understand and become proficient in C than say Python or Javascript.

...Assembler is often used to speed up computational bottlenecks.

Even lower would be a hardware description language like VHDL. This can be used to build specialized hardware that performs a particular function as though a chip had been designed to do that function and that function only. Very, very quick at doing what that function is.

While I would echo this, it's not quite as black-and-white. For instance, "describing digital circuitry in VHDL" is starting to be replaced by "describing digital circuitry in C/C++", with the (at long last, it's only taken fifteen years) arrival of high-level synthesis tools that give better quality of results from C++ than from VHDL or Verilog.

Likewise, the arrival of decent optimising compilers in the 1990s meant that C/C++ compilers would generate object code that was more efficient than hand-written assembler - because the compiler knew all the tricks, and used them all the time; while the best humans would only use most of the tricks, most of the time. "Write your low level stuff in assembler" mostly says that your compiler author was a bit rubbish.

The important thing is to realise that Computer Science courses are a lot more than "learning to program". A lot of it is about exposing you to different concepts and techniques (e.g. parallelism, or functional programming languages, or state machines, or modelling languages, or analysis of algorithms) that aren't going to fall out of "use language X to solve problem Y".

Most software engineering is about the design of the code, not just the line-by-line writing of it; about learning how to bundle things up so you don't end up with an unmaintainable pile of spaghetti logic. The difficult thing isn't the language, it's the concepts behind them. Some languages hide complexity from you; which is great at the start, but not always helpful later on (e.g. anything that runs a garbage collector is great, right up until you need to do explicit memory management). A language designed so that you constantly have to be aware of scope is going to be harder to learn than one which you don't (e.g. for me, the switch from BASIC to Pascal at university was a bit of a conceptual leap). As another example, I've seen Java programmers that never quite made the leap to writing "good" C++...
 
While I would echo this, it's not quite as black-and-white. For instance, "describing digital circuitry in VHDL" is starting to be replaced by "describing digital circuitry in C/C++", with the (at long last, it's only taken fifteen years) arrival of high-level synthesis tools that give better quality of results from C++ than from VHDL or Verilog.

Likewise, the arrival of decent optimising compilers in the 1990s meant that C/C++ compilers would generate object code that was more efficient than hand-written assembler - because the compiler knew all the tricks, and used them all the time; while the best humans would only use most of the tricks, most of the time. "Write your low level stuff in assembler" mostly says that your compiler author was a bit rubbish.

The important thing is to realise that Computer Science courses are a lot more than "learning to program". A lot of it is about exposing you to different concepts and techniques (e.g. parallelism, or functional programming languages, or state machines, or modelling languages, or analysis of algorithms) that aren't going to fall out of "use language X to solve problem Y".

Most software engineering is about the design of the code, not just the line-by-line writing of it; about learning how to bundle things up so you don't end up with an unmaintainable pile of spaghetti logic. The difficult thing isn't the language, it's the concepts behind them. Some languages hide complexity from you; which is great at the start, but not always helpful later on (e.g. anything that runs a garbage collector is great, right up until you need to do explicit memory management). A language designed so that you constantly have to be aware of scope is going to be harder to learn than one which you don't (e.g. for me, the switch from BASIC to Pascal at university was a bit of a conceptual leap). As another example, I've seen Java programmers that never quite made the leap to writing "good" C++...

Absolutely agreed; I was trying to paint the picture of "coding" being a vast spectrum, rather than a narrowly defined concept. It constantly evolves too, as you say, things like OpenCL bring the barrier to entry lower than hitherto. I've really enjoyed learning Swift, but they keep changing it - now on Swift 4!
 

Wordsmith

LE
Book Reviewer
Which trade teaches you computer coding? Or anything similar to cyber security.

I would gently suggest that coding and cyber security are different (but overlapping) skill sets.

Coding is obviously creating functionality using a suitable coding language.

Cyber security can include errors due to bone headed coding. It can also include vulnerabilities due to social engineering or physical intrusion. (One of the quickest ways of compromising a IT infrastructure is to get physical access to it and stick a rogue Wi-Fi access point into a convenient port).

Wordsmith
 

Sarastro

LE
Kit Reviewer
Book Reviewer
1010010 01000101 00100000 01000111 01100101 01101111 00100000 01110111 01101001 01101100 01101100 00100000 01101000 01100001 01110000 01110000 01101001 01101100 01111001 00100000 01110100 01100101 01100001 01100011 01101000 00100000 01111001 01101111 01110101 00100000 01110000 01111001 01110100 01101000 01101111 01101110 00100000 01110100 01101111 00100000 01110001 01110101 01101001 01110100 01100101 00100000 01100001 00100000 01101000 01101001 01100111 01101000 00100000 01101100 01100101 01110110 01100101 01101100 00101110 00100000 00100000 01010000 01111001 01110100 01101000 01101111 01101110 00100000 01101001 01110011 00100000 01100010 01100101 01100011 01101111 01101101 01101001 01101110 01100111 00100000 01110110 01100101 01110010 01111001 00100000 01110011 01101111 01110101 01100111 01101000 01110100 00100000 01100001 01100110 01110100 01100101 01110010 00100000 01101001 01101110 00100000 01100011 01101001 01110110 01110110 01111001 00100000 01110011 01110100 01110010 01100101 01100101 01110100 00101110

01011001 01101111 01110101 00100000 01101011 01101110 01101111 01110111 00101100 00100000 01101001 01100110 00100000 01111001 01101111 01110101 00100000 01110111 01100001 01101110 01110100 01100101 01100100 00100000 01110100 01101111 00100000 01100100 01101111 00100000 01101001 01110100 00100000 01110000 01110010 01101111 01110000 01100101 01110010 01101100 01111001 00101100 00100000 01101001 01110100 00100111 01110011 00100000 01110010 01100101 01100001 01101100 01101100 01111001 00100000 01101110 01101111 01110100 00100000 01110100 01101000 01100001 01110100 00100000 01101000 01100001 01110010 01100100 00101110 00101110 00101110 00001010 00001010 01101000 01110100 01110100 01110000 01110011 00111010 00101111 00101111 01110111 01110111 01110111 00101110 01100010 01101001 01101110 01100001 01110010 01111001 01110100 01110010 01100001 01101110 01110011 01101100 01100001 01110100 01101111 01110010 00101110 01100011 01101111 01101101 00101111
 

lert

LE
01011001 01101111 01110101 00100000 01101011 01101110 01101111 01110111 00101100 00100000 01101001 01100110 00100000 01111001 01101111 01110101 00100000 01110111 01100001 01101110 01110100 01100101 01100100 00100000 01110100 01101111 00100000 01100100 01101111 00100000 01101001 01110100 00100000 01110000 01110010 01101111 01110000 01100101 01110010 01101100 01111001 00101100 00100000 01101001 01110100 00100111 01110011 00100000 01110010 01100101 01100001 01101100 01101100 01111001 00100000 01101110 01101111 01110100 00100000 01110100 01101000 01100001 01110100 00100000 01101000 01100001 01110010 01100100 00101110 00101110 00101110 00001010 00001010 01101000 01110100 01110100 01110000 01110011 00111010 00101111 00101111 01110111 01110111 01110111 00101110 01100010 01101001 01101110 01100001 01110010 01111001 01110100 01110010 01100001 01101110 01110011 01101100 01100001 01110100 01101111 01110010 00101110 01100011 01101111 01101101 00101111
01001101 01100101 01101000 00101100 00100000 01001001 00100000 01110101 01110011 01100101 01100100 00100000 01101000 01110100 01110100 01110000 01110011 00111010 00101111 00101111 01110111 01110111 01110111 00101110 01110010 01100001 01110000 01101001 01100100 01110100 01100001 01100010 01101100 01100101 01110011 00101110 01100011 01101111 01101101 00101111 01100011 01101111 01101110 01110110 01100101 01110010 01110100 00101111 01101110 01110101 01101101 01100010 01100101 01110010 00101111 01100001 01110011 01100011 01101001 01101001 00101101 01110100 01101111 00101101 01100010 01101001 01101110 01100001 01110010 01111001 00101110 01101000 01110100 01101101 01101100
 

GDog

Old-Salt
1010010 01000101 00100000 01000111 01100101 01101111 00100000 01110111 01101001 01101100 01101100 00100000 01101000 01100001 01110000 01110000 01101001 01101100 01111001 00100000 01110100 01100101 01100001 01100011 01101000 00100000 01111001 01101111 01110101 00100000 01110000 01111001 01110100 01101000 01101111 01101110 00100000 01110100 01101111 00100000 01110001 01110101 01101001 01110100 01100101 00100000 01100001 00100000 01101000 01101001 01100111 01101000 00100000 01101100 01100101 01110110 01100101 01101100 00101110 00100000 00100000 01010000 01111001 01110100 01101000 01101111 01101110 00100000 01101001 01110011 00100000 01100010 01100101 01100011 01101111 01101101 01101001 01101110 01100111 00100000 01110110 01100101 01110010 01111001 00100000 01110011 01101111 01110101 01100111 01101000 01110100 00100000 01100001 01100110 01110100 01100101 01110010 00100000 01101001 01101110 00100000 01100011 01101001 01110110 01110110 01111001 00100000 01110011 01110100 01110010 01100101 01100101 01110100 00101110

That would have been much less annoying if the first byte wasn't missing the first bit... Ended up writing my own encoder in C# before I worked out why it was borked
 

Latest Threads

Top