日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

ABAP vs Java, 蛙泳 vs 自由泳

發(fā)布時間:2023/12/19 java 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ABAP vs Java, 蛙泳 vs 自由泳 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

去年7月定下的一年之內(nèi)學會自由泳的目標終于實現(xiàn)了,特來還愿。

ABAPJava,?蛙泳自由泳。前面的組合是Jerry用來掙錢養(yǎng)家的技術,后者是Jerry花了大量業(yè)余時間和金錢苦練的技能。或許有的朋友覺得這兩組概念風馬牛不相及,然而在Jerry眼中,ABAP之于Java, 相當于蛙泳之于自由泳。

文章目錄

  • ABAP和Java的相同點

    1. 語言特性

    2. 開發(fā)框架,工具和生態(tài)圈

  • 蛙泳和自由泳的相同點

  • ABAP(蛙泳)和Java(自由泳)的不同點

    *1.? “Java(自由泳)的環(huán)境搭建(游進)比ABAP(蛙泳)麻煩”*

    *2.? “ABAP(蛙泳)的調(diào)試(換氣)比Java(自由泳)簡單”*

    *3.? “ABAP(蛙泳)和Java(自由泳)哪一個上手更容易?”*


ABAP和Java的相同點

1. 語言特性

這個公眾號有很多關注者是學生朋友,因此還是有必要簡單介紹下ABAP。ABAP(**A**dvanced?**B**usiness**A**pplication?**P**rogramming)是SAP設計,實現(xiàn)并維護的一門高級編程語言,其關鍵字和虛擬機(ABAP Runtime)基于C/C++實現(xiàn)。同Java一樣,ABAP也是一門支持面向對象,強類型的靜態(tài)語言。可以說SAP之所以過去40年能在企業(yè)管理軟件領域里取得輝煌成就,ABAP功不可沒,因為大多數(shù)SAP成功的傳統(tǒng)產(chǎn)品,比如SAP ERP, SAP Business Suite, 還有2015年推出的S/4HANA, 都基于ABAP。

ABAP和Java并沒有躺在過去的功勞簿上睡大覺,各自也都在不斷進化著。

ABAP 從7.40版本開始,增加了很多新的關鍵字和語法,使得用ABAP寫出來的代碼更加緊湊和簡潔。Table Expression,變量的內(nèi)聯(lián)聲明,類型自動推斷,更強大的鏈式調(diào)用等新的語言特性,使得實現(xiàn)同樣的需求,用7.40后的ABAP編碼,代碼量通常是7.40之前的50%甚至更少。

ABAP也在不斷吸收一些其他編程語言的特性。比如支持函數(shù)式編程思想的JavaScript和Clojure中的reduce操作,在ABAP 7.40之后也作為一個關鍵字得到支持了。具體例子可以看我的博客:

Functional Programming – Try Reduce in JavaScript and in ABAP

https://blogs.sap.com/2017/02/27/functional-programming-try-reduce-in-javascript-and-in-abap/

另一方面,我的很多同事戲稱:Java 9的很多特性都沒搞清楚,但在Java 9發(fā)布僅僅幾個月后,Java 10又來了。這本身說明Java的進化速度非常快。和ABAP相比,網(wǎng)絡上關于Java最新特性介紹的文章多得多,Jerry這里就不再重復了。

2. 開發(fā)框架,工具和生態(tài)圈

兩種語言都有各自數(shù)目眾多的開發(fā)框架和繁榮的生態(tài)圈。只是從生態(tài)圈的規(guī)模來說,ABAP生態(tài)圈內(nèi)開發(fā)者的絕對數(shù)量不如Java開發(fā)者。

SAP有很多基于ABAP的開發(fā)框架,平臺層面的框架有例如基于ABAP的MVC開發(fā)框架ABAP WebDynpro和WebClient UI,OData Service開發(fā)框架,Web Service開發(fā)框架,Business Object的開發(fā)框架BOPF等等。從應用層面來說,框架的數(shù)量就更多了。即使在其他公司的開發(fā)人員眼中一個很簡單的需求,SAP也很可能采取了一個微型框架(Mini Framework)來實現(xiàn)。這種大量引入框架實現(xiàn)應用需求的思路,一方面體現(xiàn)了德國人考慮需求時追求嚴謹完備的習慣,另一方面,通過將實現(xiàn)需求的復雜度和工作量轉移到SAP標準應用開發(fā)上來的方式,減少或者避免了Partner和客戶進行二次開發(fā)的工作量,使得很多非標準功能僅僅通過在這些微型框架上做配置就能實現(xiàn)。

任何一個基于ABAP的SAP傳統(tǒng)產(chǎn)品里,都隱藏了很多有用的工具,比如各種報表或者事務碼,用于提供關于該產(chǎn)品的輔助功能,比如問題分析,日志查看,性能檢測等等。我想即便大多數(shù)在一個產(chǎn)品里深耕了10年的SAP顧問,恐怕也無法能夠100%肯定地說自己熟悉該產(chǎn)品里所有的工具。

除了這些SAP提供的標準工具外,也存在一些ABAP開源愛好者貢獻的開源項目,比如ABAP Git客戶端,用于不同系統(tǒng)間離線傳輸ABAP資源的SAP Link,還有用ABAP操作Excel的abap2xls項目等等。

Java這么多年一路走來,其層出不窮的開發(fā)框架更是早已深入人心。從早期經(jīng)典的三駕馬車SSH,到近些年來隨著微服務火起來而流行開來的Spring Boot和Spring Cloud等等,可以說無論打開任何一個Java技術社區(qū),都能看到它們的身影。

得益于全球數(shù)量龐大的Java開發(fā)人員,Java生態(tài)圈的開發(fā)工具,庫文件也是數(shù)不勝數(shù)。在Maven的遠程倉庫http://repo1.maven.org/maven2里,我們能找到許許多多公司發(fā)布的庫文件。

這是遠程倉庫上SAP庫文件的根目錄:

同樣的,如果您對其他公司,比如Microsoft, Oracle,Salesforce發(fā)布的Java庫文件感興趣,那就到對應目錄去看看吧:

蛙泳和自由泳的相同點

Jerry作為一個過來人,說說我對這兩種泳姿相同點的一些認識。

1. 都是游泳初學者的入門泳姿。稍稍不同的是,在國內(nèi),蛙泳是最受推薦的入門泳姿,而國外的朋友學游泳,通常都選擇了自由泳作為入門泳姿。

2. 初學者都會遇到兩個最大的瓶頸,即腿部動作和換氣。

腿部動作:很多成年人初學蛙泳,在水里進行蛙泳腿部動作“收-翻-蹬夾”的“翻”這一步時,由于種種原因,無法將腳腕的翻腕動作做出來,這樣無法確保腳掌以最大面積推水,導致泳者在水中感覺費了很大力氣蹬腿,但是前進速度緩慢。

同樣,自由泳初學者遇到的第一道坎就是打腿不前進。很多成年人初學打腿時,體會不到自由泳打腿的髖部發(fā)力(下圖黃圈所示部位),大腿帶動小腿,鞭狀發(fā)力的打腿形式,陷入打腿時水花四濺,但就是不前進的窘境。

換氣:這是很多游泳初學者幾乎都會遇到的另一道坎。反正Jerry學蛙泳換氣和自由泳換氣時,都喝了足夠多的水才學會的。游泳論壇里很多同病相憐的朋友們都說學換氣就是一個將練習換氣時喝下去水的容量換算成經(jīng)驗值的過程——當經(jīng)驗值滿了后,自動解鎖換氣技能。Jerry想了想自己學會這兩種泳姿換氣的過程,好像還真是這樣。

3. 兩種泳姿都有各種各樣的變式(Variant)。

像前面介紹過的ABAP和Java擁有五花八門的工具一樣,蛙泳和自由泳也有著眾多變式。

蛙泳的不同種類:平蛙和波蛙

平蛙和波蛙是蛙泳的兩種主流姿勢(本文不討論抬頭蛙)。

蛙泳初學者無一例外學的都是平蛙,因為比較簡單,對泳者上肢力量要求不高。雙手前伸時壓水抬頭即可換氣,抬起換氣的動作可以做得很慢。游泳館里很多蛙泳都是平蛙,這種泳姿游起來輕松,省力,適合長游。我自己的感受是平蛙有一半的時間在水里都是處于完全放松狀態(tài),哪怕一口氣游1公里,也不覺得累。

波蛙是蛙泳運動員采用的競技泳姿,頻率比休閑式平蛙快得多。比較一下:

平蛙:

波蛙:

波蛙為了減少蛙泳在高速前進過程中成倍增長的阻力,把整個上半身都提出水面,從空氣中前進。波蛙換氣和平蛙換氣相比,一個顯著的區(qū)別就是通過雙肩拱起到幾乎碰到耳朵的程度來減少阻力,看起來極具觀賞性,非常霸氣!

可惜對身體核心力量要求很高,不好學啊。。。

蛙泳早呼吸與晚呼吸

早呼吸:顧名思義,劃手的時候,手剛開始外劃就抬頭換氣。采用早呼吸可以給泳者提供充足的換氣時間,適合初學者。看看知乎游泳大神易夢覺的早呼吸教學示范:

晚呼吸:外劃時頭部仍然注視池底,外劃結束手臂開始內(nèi)收時迅速抬頭,雙手快速前伸。晚呼吸要求泳者上肢有一定的爆發(fā)力,換來的收益就是游進速度快于早呼吸。

看下晚呼吸的動作:

蛙泳寬蹬腿與窄蹬腿

初學者和業(yè)余蛙泳一般都是寬蹬腿,運動員比賽時都是窄蹬腿。寬蹬腿膝蓋張開的距離比窄蹬腿寬,蹬夾時劃過的圓弧周長大于窄蹬腿。

寬蹬腿具有明顯的蹬夾動作,如果在岸上觀察很多蛙泳初學者的動作,能清晰看到先蹬水后夾水的順序。而窄蹬腿,蹬夾幾乎一氣呵成而融為一體,很難嚴格區(qū)分開來。注意看這些運動員的窄蹬腿:

寬蹬腿由于橫截面過大,所以承受的水阻也大于窄蹬腿,因此競技比賽中的蛙泳都是窄蹬腿。然而窄蹬腿相對寬蹬腿對膝蓋壓力較大,如果您的膝蓋柔韌性不足,那還是老老實實去練寬蹬腿吧,以免膝蓋損傷。

自由泳劃手的前交叉,中交叉和后交叉

下圖右手露在水面即將入手開始自由泳的劃水動作,此時如果左手與水平面的夾角保持在30度以內(nèi),稱為前交叉。30度到60度范圍內(nèi)為中交叉,大于60度成為后交叉。

采用前交叉,則右臂入水時,左臂正處于開始下劃階段,此時整個身體非常舒展,帶有一定的滑行速度,便于全身主要肌肉群發(fā)力。同時動作節(jié)奏相對較慢,適合業(yè)務愛好者和運動員長距離比賽使用。后交叉則是另一個極端,右手入水時,左手已經(jīng)進入劃水的后半階段了。后交叉劃水頻率極高,需要泳者具有很強的爆發(fā)力,通常只有短距離游泳運動員才hold得住。

看看這個前交叉動作,是不是非常舒展?

自由泳的各種變式:*二次腿和六次腿*

二次腿:左右劃水各一次,劃一次水,打一次腿。手臂剛入水時,打異側腿。很多鐵三長距離自由泳的朋友都用的二次腿,因為省力,便于長游。

六次腿:打腿產(chǎn)生的推進力大于二次腿。

ABAP(蛙泳)和Java(自由泳)的不同點

兩門截然不同的編程語言,差異當然有很多了。這里只挑最顯著的聊。

1.? “Java(自由泳)的環(huán)境搭建(游進)比ABAP(蛙泳)麻煩”

Jerry和SAP開發(fā)顧問朋友們聊天時,經(jīng)常談到這個話題。一個ABAP新手,只要在電腦上裝個SAP GUI,連接上服務器就可以開工了。而一個Java開發(fā)新手,如果要做企業(yè)級應用開發(fā)的話,開發(fā)人員通常都會拿到一個很長的清單,注明了開發(fā)環(huán)境搭建所需的長長的步驟:裝JRE和JDK,下載Maven,安裝代碼版本控制工具,配置環(huán)境變量,配置本地數(shù)據(jù)庫等等。一般都會使用基于Java的各種框架比如Spring全家桶,那么為了提高開發(fā)效率,還得去下載這些框架基于某種IDE的插件并安裝。如果工作內(nèi)容包含微服務開發(fā),又得安裝一些基于命令行的微服務部署工具。

對于一個Java新手來說,在基于要求的開發(fā)環(huán)境內(nèi)跑通一個Hello World應用之前,通常需要花大量的時間來搗鼓這些環(huán)境準備工作。更有可能發(fā)生的是在搭建過程中遇到各種各樣的錯誤,導致搭建流程進行不下去。此時要么求助組內(nèi)有經(jīng)驗的同事,要么根據(jù)錯誤消息到StackOverflow上去查找解決方案。

其實從ABAP開發(fā)的整個流程來看,仍然需要環(huán)境搭建這一步,即Netweaver服務器的安裝和運維。只是因為ABAP和Java存在的兩個差異,使得ABAP開發(fā)人員在環(huán)境搭建這個話題上,比Java開發(fā)人員輕松不少。

(1) 在絕大多數(shù)企業(yè)里,ABAP Netweaver的搭建是由專職人員,即SAP Basis去負責的,不需要ABAP應用開發(fā)人員介入。ABAP開發(fā)人員登錄到Netweaver服務器上,在服務器上進行開發(fā)。Netweaver服務器既是ABAP開發(fā)環(huán)境,又是ABAP應用最終的運行環(huán)境,所以意味著ABAP代碼一旦開發(fā)完畢,能立即在服務器上運行,省去了應用部署這一步驟。

而Java應用開發(fā)工作絕大多數(shù)情況都不會在服務器端進行,而是在各個開發(fā)人員本地搭建好的環(huán)境中進行,待開發(fā)完成單元測試通過后通過git等工具將源代碼推送到遠端代碼倉庫,同時通過持續(xù)集成等工具將構建好的應用部署到服務器上。

(2) Netweaver服務器的特色之一,就是對ABAP開發(fā)和ABAP運行時提供了全局而統(tǒng)一的支持。Netweaver自帶了代碼版本控制工具,因此ABAP開發(fā)不需要Git;Netweaver提供了類似Maven倉庫的功能,在Netweaver里叫Repository Information System,ABAP開發(fā)人員在計劃新寫一段代碼時,通常都會去RIS里檢查是否已經(jīng)有現(xiàn)成的類/函數(shù)實現(xiàn)了類似的功能。一個ABAP類要使用另一個ABAP類提供的API,可以直接調(diào)用,因為所有的類都存在于中央的RIS里,而ABAP不存在Java里的包訪問權限的概念——一個類對服務器里的任何類都可訪問,并且只提供唯一的版本供外界訪問(ABAP里稱為Active版本)。因此ABAP也不像Java那樣需要通過Maven來進行項目依賴管理。ABAP提供了OPEN SQL,這些SQL語句通過Netweaver提供的數(shù)據(jù)庫接口自動轉換成Netweaver服務器連接的數(shù)據(jù)庫提供商的原生SQL語句,所以ABAP開發(fā)也不需要自行安裝服務器。

由此可見,很多Java開發(fā)人員需要在本地做的事情,其實在ABAP開發(fā)里已經(jīng)通過Netweaver服務器統(tǒng)一提供了,因此從結果上看,顯得Java開發(fā)人員的環(huán)境搭建比ABAP要麻煩一些。

當然針對Java這種環(huán)境搭建之痛也存在一些解決方案。比如SAP內(nèi)部的很多培訓,需要培訓人員上機做練習,那么講師會事先將環(huán)境搭好,然后做成一個虛擬機鏡像,分發(fā)給學員。學員用虛擬機軟件加載這些鏡像,就能直接基于講師準備好的環(huán)境進行上機練習,省去了每位學員搭環(huán)境的時間。Jerry還了解到SAP成都研究院的某些團隊也在嘗試用Docker來解決類似問題。

從上面的討論看出Java的環(huán)境搭建確實比ABAP麻煩,那么自由泳游起來確實比蛙泳麻煩么?Jerry的個人意見:是!理由有四。

(1) 蛙泳時整個人俯臥于水中,雙手雙腳在任何時候都是呈左右對稱地運動。而自由泳的手腳為非左右對稱運動,在初學者還沒形成身體本能時,開始劃手時還要考慮應該打哪一側的腿。

(2) 蛙泳游進時,蹬腿夾水結束后可以在水里滑行一兩秒,身體得到充分休息。而自由泳行進過程中,手和腳都是不停地運動著,對初學者來說很難找到像蛙泳那樣可以通過滑行來休息的感覺。

(3) 自由泳相比蛙泳,身體在前進過程中還多了個轉體動作。

Jerry最開始學自由泳時,以為它和蛙泳一樣,身體始終是俯臥在水中前進的。后來才從教練那里和網(wǎng)上的視頻學到,游進過程中必須有一個轉體動作,如下圖所示。

(4) 自由泳的換氣比蛙泳麻煩。

這個太令我刻骨銘心了,需要單獨說。

2. “ABAP(蛙泳)的調(diào)試(換氣)比Java(自由泳)簡單

做軟件開發(fā)(游泳)而不需要調(diào)試(換氣),幾乎是一件不可能的事情。

前面已經(jīng)說過,對于ABAP來說,因為Netweaver服務器既是ABAP開發(fā)環(huán)境,又是ABAP應用的執(zhí)行環(huán)境。因此任何時候,需要調(diào)試,直接在源代碼上設斷點,啟動應用,斷點即觸發(fā)。

Java的服務器端調(diào)試就沒這么輕松了。首先需要給遠程服務器的JVM加上debug參數(shù)來啟動服務器:

-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,server=y,suspend=n,address=

然后在本地IDE比如Eclipse里做配置,通過jdwp(Java Debug Wire Protocol)連接遠程服務器打開的監(jiān)聽端口,本地調(diào)試進程和遠程服務器進程之間通過socket實現(xiàn)數(shù)據(jù)傳輸。

蛙泳的換氣,因為整個游進過程中身體始終保持俯臥狀態(tài),因此動作非常自然,和人在陸地上的舉動幾乎沒有區(qū)別,從水中抬起頭來即可換氣。具體動圖參看前文早呼吸和晚呼吸部分。

自由泳的換氣,Jerry為了學會它是喝飽了水。作為陸地上生活的動物,人在水中換氣時,把頭抬高讓嘴遠離水面進行換氣是一種本能。然而學習自由泳的換氣,需要克服人的這種本能,正確的方式是靠行進時頭的推進、身體的翻轉在頭部形成的充滿空氣的小凹槽里換氣。國外的教學視頻里稱為Breathe into the air pocket。初學者練習這個動作,要么由于害怕?lián)Q不了氣頭抬得太高變?yōu)橥苡緭Q氣,要么轉頭一張嘴,一大口水就喝進去了。

看清楚下圖里的air pocket了么?

從空氣袋里換氣的標準姿勢:

3.? “ABAP(蛙泳)和Java(自由泳)哪一個上手更容易?”

ABAP和Java,蛙泳和自由泳,到底誰比誰更容易學?

先說游泳。國內(nèi)的游泳業(yè)余培訓班大多是以10或12節(jié)課的速成班為主,在這種課時限制下,也只有蛙泳這種最易上手的泳姿可供選擇了.其他三種對身體素質(zhì)和水性的要求比蛙泳高。并且蛙泳學會后,踩水也就自然會了,踩水技能比較實用。

為什么國外更多以自由泳作為入門泳姿?因為國外的游泳教學多以長訓為主。參考知乎易夢覺大神的解答:

因此,Jerry認為,這個話題的準確回答應為:以10節(jié)課速成班為例,對大多數(shù)人來說,蛙泳比自由泳更容易學會。

ABAP和Java哪種語言更容易上手?如果不考慮本地搭建Netweaver服務器的難度,那么學會這兩門語言的基本語法難度差不多。然而學完了ABAP標準教程BC401等等并不意味著就具有了用ABAP開發(fā)SAP應用程序的能力。比如要開發(fā)CRM應用,還得去學CR100標準課程,掌握SAP CRM開發(fā)框架的用法。如果想用ABAP開發(fā)OData服務,還得學標準課程GW100以了解如何在SAP Gateway上做ABAP開發(fā),以此類推。

同樣,在Eclipse里打印出Hello World只是萬里長征走完了第一步。前面已經(jīng)說過,根據(jù)您具體工作內(nèi)容的不同,您還需要學習各種Java框架,庫文件的使用。

從這個角度來說,ABAP和Java入門的難度差不多。能用這兩門語言寫一些簡單的小工具,就好比能用蛙泳和自由泳的姿勢游個二三十米。ABAP和Java開發(fā)人員入門之后,接下來的漫漫長路,就在于如何精進能夠基于自己所學,去實現(xiàn)真實場景下客戶需求的技藝。而每一位真正的游泳愛好者,想必心中都有下面這個心愿:我的打腿像孫楊。

編程與游泳,路漫漫其修遠兮,讓我們上下而求索。

更多閱讀

  • Jerry的ABAP, Java和JavaScript亂燉

  • Jerry的2017, 編程與游泳

  • ABAP開發(fā)人員未來應該學些什么

  • Jerry的ABAP原創(chuàng)技術文章合集

要獲取更多Jerry的原創(chuàng)技術文章,請關注公眾號”汪子熙”或者掃描下面二維碼:

總結

以上是生活随笔為你收集整理的ABAP vs Java, 蛙泳 vs 自由泳的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。